狠狠撸

狠狠撸Share a Scribd company logo
OSS written in Swift
yukiasai
?浅井勇樹 28歳
?Github : yukiasai
?出身:福井県 福井高専
?今 : 株式会社マネーフォワード
?マネーフォワード - 自動家計簿アプリ
?過去 : 株式会社ナチュラルスタイル
?ZOZOTOWN - ファッション通販アプリ
?WEAR - ファッションコーディネートアプリ
?得意 : iOS
?趣味 : ディズニーランド
自己紹介
日常のコードリーディング
?Trending repositories - Github
?最近人気のリポジトリランキング
?Search Github - Github
?使い方がわからないクラスがあったらとりあえず検
索
?みんながどんな使い方をしているかわかる
社内でコードリーディング
?週1でSwiftコードリーディング会を開催
?全社のiOSエンジニアに知見を共有するのが目的
?有名どころから自作まで様々
?Alamofire
?Bond
?ObjectMapper
?SwiftTask
?などなど、、、
最近までOSSをリリースしようとは
思わなかった
弊社技術顧問の松田明さんに
言われたこと
「コミュニティに还元しよう」
「ただ乗りイクナイ」
紹介するOSS
?Shoyu - yukiasai/Shoyu
?UITableViewをもっと簡単に
?Gecco - yukiasai/Gecco
?ビューにスポットライトをあてたい
?Kaiseki - yukiasai/Kaiseki
?JSONのパースを自動で
すみません半分颈翱厂系です
Shoyu
UITableViewをもっと簡単に
UITableViewを普通に使うとこうなる
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 3
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0: return 5
case 1: return 3
default: fatalError()
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->
UITableViewCell {
switch (indexPath.section, indexPath.row) {
case (0, _):
let cell = tableView.dequeueReusableCellWithIdentifier("MemberCell") as! MemberTableViewCell
return cell
case (1, _):
let cell = tableView.dequeueReusableCellWithIdentifier("GroupCell") as! GroupTableViewCell
return cell
default:
fatalError()
}
}
UITableViewあるある
?デリゲートメソッドがswitch文(if文)地獄になる
?ビューの見た目とコードの見た目が乖離している
?どのセクションにどのローが表示されているか追うのが
大変
?switch文を一箇所いじるとほぼ全箇所に影響する
?バグの温床となる可能性が極めて高い
?カスタムセルを使う場合デリゲートメソッド内でいちいちキャ
ストしてやる必要がある
Shoyuだとこうなる
tableView.source = Source()
.createSection { section in
section.createRows(5) { (_, row: Row<MemberTableViewCell>) in
row.height = 52
row.configureCell = { cell, _ in }
row.didSelect = { _ in }
}
}
.createSection { section in
section.createRows(3) { (_, row: Row<GroupTableViewCell>) in
row.height = 52
row.configureCell = { cell, _ in }
row.didSelect = { _ in }
}
}
tableView.reloadData()
Shoyuの利点
?switch文(if文)地獄から開放される
?ビューの見た目とコードの見た目が近い
?セクションの追加、ローの追加がとっても楽ちん
Gecco
ビューにスポットライトをあてたい
?こんなのできないの?とよく聞かれる
?円、長方形、角丸長方形をサポート
?ModalViewControllerで表示
?そうじゃなくてもいい
Kaisekiで使われているテクニック
Kaiseki
JSONのパースを自動で
Kaisekiを使うとこうなる
こんなオブジェクトを宣言
class Object: Entity {
// Basic
let int = Property<Int>()
let string = Property<String>()
// Array
let array = Property<[Bool]>()
// Optional
let optional = Property<Int?>()
// Entity
let object = Property<Object?>()
}
使い方
let json: [String: AnyObject] = [“int”: 1, “string”: “aaa”, “array”: [true, false], “optional”: null, ....]
let obj = Object.fromJSON(json: jsonData)
obj.int.value // -> 1
obj.string.value // -> aaa
Kaisekiで使われているテクニック
?Mirrorを用いた自動マッピング
?プロトコルで構造体(Int,Optional,Array)を拡張
Thank you!
yukiasai

More Related Content

Oss written in swift