SlideShare a Scribd company logo
Swi$%のライブラリの話
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(?)
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
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
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: String
case .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&版なものも多いので継続的なウォッチが
必要

More Related Content

PDF
Overview of Scala ~ Hacker Tackle
PDF
Rezni Alati Od Tvrdog Materijala Oslojeni Aluminijum Oksidom
PDF
How to improve Type-safety in your Objective-C code
PPTX
オレたちとVisual Studioとの関係を話そう
PDF
Vagrantで即席クラウドストレージ
PDF
Swift事情2014夏 ~ Swift入門 beta6対応
PDF
SwiftとCocoaPodsで始めるサクサクiOS開発!
Overview of Scala ~ Hacker Tackle
Rezni Alati Od Tvrdog Materijala Oslojeni Aluminijum Oksidom
How to improve Type-safety in your Objective-C code
オレたちとVisual Studioとの関係を話そう
Vagrantで即席クラウドストレージ
Swift事情2014夏 ~ Swift入門 beta6対応
SwiftとCocoaPodsで始めるサクサクiOS開発!

Similar to Swift Library (20)

PDF
OpenStack Object Storage; Overview
PDF
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
PDF
Scalaでのプログラム開発
PDF
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
PPTX
OWASPのドキュメントやツールを知ろう
PDF
楽しいSwift!クラスと構造体を知る:)
PDF
introduction to OWASP's documentation 20250607
PDF
Svgアニメーションを実装してみよう 20150207
PDF
javascript を Xcode でテスト
PDF
Java/Androidセキュアコーディング
PDF
Scala界隈の近況
PDF
OWASP Projects
PDF
SwiftUIのライブコーディングするとxcodeが◯回落ちる
PDF
Objective-Cプログラマのためのswift導入法
PDF
Objective-C/Swift コードの共用
PDF
Asakusaソースコードリーディング #4 – Asakusa Test Driver
PPTX
Open modeler
PDF
OSC2011Tokyo/Fall OpenStack Swift入門
PPTX
Wwdc2015 ios9あれこれ
PDF
Swift 1.2からSwift 2への移行 #cocoa_kansai
OpenStack Object Storage; Overview
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Scalaでのプログラム開発
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
OWASPのドキュメントやツールを知ろう
楽しいSwift!クラスと構造体を知る:)
introduction to OWASP's documentation 20250607
Svgアニメーションを実装してみよう 20150207
javascript を Xcode でテスト
Java/Androidセキュアコーディング
Scala界隈の近況
OWASP Projects
SwiftUIのライブコーディングするとxcodeが◯回落ちる
Objective-Cプログラマのためのswift導入法
Objective-C/Swift コードの共用
Asakusaソースコードリーディング #4 – Asakusa Test Driver
Open modeler
OSC2011Tokyo/Fall OpenStack Swift入門
Wwdc2015 ios9あれこれ
Swift 1.2からSwift 2への移行 #cocoa_kansai
Ad

More from Kosuke Usami (20)

PDF
SnapKit
PDF
View 系ライブラリに関する悩み
PDF
RxSwift
PDF
Auto Layout Tips
PDF
RxSwift x APIKit
PDF
RxSwift x Realm
PDF
RxSwift
PDF
Eddystone Beacon
PDF
Xamarin で Apple Watch アプリを作る
PDF
iBeacon Applications
PDF
APIKit
PDF
JXUG Conference 2 West
PDF
すごいHaskell読書会
PDF
Xamarin.iOS
PDF
CotEditor Script
PDF
Affine Transform
PDF
Semantic Versioning
KEY
Mac アプリの Retina 対応
KEY
Mountain Lion Sharing Service
KEY
OS X LionのVersions対応
SnapKit
View 系ライブラリに関する悩み
RxSwift
Auto Layout Tips
RxSwift x APIKit
RxSwift x Realm
RxSwift
Eddystone Beacon
Xamarin で Apple Watch アプリを作る
iBeacon Applications
APIKit
JXUG Conference 2 West
すごいHaskell読書会
Xamarin.iOS
CotEditor Script
Affine Transform
Semantic Versioning
Mac アプリの Retina 対応
Mountain Lion Sharing Service
OS X LionのVersions対応
Ad

Swift Library