Download - Swift Library
Swi$%のライブラリの話
Swi$%の歩み• 2014/06(:(Swi-((WWDC(2014)
• 2014/09(:(Swi-(1.0((Xcode(6.0)
• 2014/10(:(Swi-(1.1((Xcode(6.1)
• 2015/04(:(Swi-(1.2((Xcode(6.3)
• 2015/06(:(Swi-(?.?((WWDC(2015(?)
Swi$%の特徴• Modern
• Designed,for,Safety
Modern• タプル、Struct、Enum
• クロージャ、ジェネリクス
• 関数型プログラミング
Designed(for(Safety• var(型推論、暗黙的型変換はしない)
• let(一度代入したら変更できない)
• 型安全(Array/Dic.onary1内の値の型指定)
• Op.onal(nil1の取り扱い)
Swi$%のライブラリ
Objec&ve(C*のライブラリ?• Bridging(Header
• CocoaPods(は自動で対応してくれる
• しかし、Swi3(らしさは失われる
• 型安全でない
• 無意味な(Op6onal(
• 他に代替がない場合の手段としては有益
Swi$%ネイティブのライブラリ• できるだけ"Swi&"ネイティブのものを選びたい
• Objec,ve.C"定番ライブラリはだいたい同様の"Swi&"版がある
• Swi&"ならではのものも少しずつ出てきている
Alamofire
Alamofire• AFNetworking.の.Swi0.版みたいな立ち位置Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) .response { (request, response, data, error) in println(response) println(error) }
APIKit• Swi%&らしさを打ち出したネットワーク通信ライブラリlet request = GitHub.SearchRepositories(query: "APIKit", sort: .Stars)GitHub.sendRequest(request) { response in switch response { case .Success(let box): // SearchRepositories クラスが定めるレスポンス型 println(box.value) case .Failure(let box): // NSError 型 println(box.value) }}
Result• さきほどの"APIKit"が内部で使っているenum Result<T, E> { case Success(Box<T>) case Failure(Box<E>)}
result = someFunc() // Result<String, NSError> を返す関数switch result {case .Success(let box): // box.value: Stringcase .Failure(let box): // box.value: NSError}
補足:Op#onal(再考• Op$onal:成功/失敗の意味づけenum Optional<T> { case Some(T) case None}
• Result(は(nil((None)(側にエラー値を持たせたもの
• (Haskell(でいえば、Op4onal(は(Maybe(モナド、Result(は(
Either(モナド)
Swi$yJSON
Swi$yJSON
• ないときlet JSONObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil)if let statusesArray = JSONObject as? [AnyObject], let status = statusesArray[0] as? [String: AnyObject], let user = status["user"] as? [String: AnyObject], let userName = user["name"] as? String { // userName を得た}
• あるときlet json = JSON(data: dataFromNetworking)if let userName = json[0]["user"]["name"].string { // userName を得た}
ObjectMapper
ObjectMapper• Mantle(が(Swi,(で使えないとお嘆きの方へstruct Temperature: Mappable { var celcius: Double? var fahrenheit: Double?
init(){}
init?(_ map: Map) { mapping(map) }
mutating func mapping(map: Map) { celcius <- map["celcius"] fahrenheit <- map["fahrenheit"] }}
SnapKit
SnapKit• AutoLayout)記述ライブラリ)Masonry)の)Swi1)版let padding = UIEdgeInsetsMake(10, 10, 10, 10)view1.snp_makeConstraints { make in make.top.equalTo(superview.snp_top).with.offset(padding.top) make.left.equalTo(superview.snp_left).with.offset(padding.left) make.bottom.equalTo(superview.snp_bottom).with.offset(-padding.bottom) make.right.equalTo(superview.snp_right).with.offset(-padding.right)}
その他
その他• RealmSwi*
• ReachabilitySwi*
• KeychainAccess
• PromiseKit
• Typhoon
• Reac9veCocoa<(3.0)
おわりに• Swi%&ネイティブのライブラリを使おう
• だいぶ増えてきた
• ただし、まだ&beta&版なものも多いので継続的なウォッチが必要