Download - Swift Library

Transcript
Page 1: Swift Library

Swi$%のライブラリの話

Page 2: Swift Library
Page 3: Swift Library

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(?)

Page 4: Swift Library

Swi$%の特徴• Modern

• Designed,for,Safety

Page 5: Swift Library

Modern• タプル、Struct、Enum

• クロージャ、ジェネリクス

• 関数型プログラミング

Page 6: Swift Library

Designed(for(Safety• var(型推論、暗黙的型変換はしない)

• let(一度代入したら変更できない)

• 型安全(Array/Dic.onary1内の値の型指定)

• Op.onal(nil1の取り扱い)

Page 7: Swift Library

Swi$%のライブラリ

Page 8: Swift Library

Objec&ve(C*のライブラリ?• Bridging(Header

• CocoaPods(は自動で対応してくれる

• しかし、Swi3(らしさは失われる

• 型安全でない

• 無意味な(Op6onal(

• 他に代替がない場合の手段としては有益

Page 9: Swift Library

Swi$%ネイティブのライブラリ• できるだけ"Swi&"ネイティブのものを選びたい

• Objec,ve.C"定番ライブラリはだいたい同様の"Swi&"版がある

• Swi&"ならではのものも少しずつ出てきている

Page 11: Swift Library

Alamofire• AFNetworking.の.Swi0.版みたいな立ち位置Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) .response { (request, response, data, error) in println(response) println(error) }

Page 13: Swift Library

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) }}

Page 15: Swift Library

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}

Page 16: Swift Library

補足:Op#onal(再考• Op$onal:成功/失敗の意味づけenum Optional<T> { case Some(T) case None}

• Result(は(nil((None)(側にエラー値を持たせたもの

• (Haskell(でいえば、Op4onal(は(Maybe(モナド、Result(は(

Either(モナド)

Page 18: Swift Library

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 を得た}

Page 20: Swift Library

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"] }}

Page 21: Swift Library

SnapKit

Page 22: Swift Library

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)}

Page 23: Swift Library

その他

Page 25: Swift Library

おわりに• Swi%&ネイティブのライブラリを使おう

• だいぶ増えてきた

• ただし、まだ&beta&版なものも多いので継続的なウォッチが必要


Top Related