SlideShare a Scribd company logo
1 of 25
Download to read offline
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
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

Similar to Swift Library

OpenStack Object Storage; Overview
OpenStack Object Storage; OverviewOpenStack Object Storage; Overview
OpenStack Object Storage; Overviewirix_jp
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチTomoharu ASAMI
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarconSeasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarconKazuhiro Sera
 
OWASPのドキュメントやツールを知ろう
OWASPのドキュメントやツールを知ろうOWASPのドキュメントやツールを知ろう
OWASPのドキュメントやツールを知ろうYuichi Hattori
 
楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)楽しいSwift!クラスと構造体を知る:)
楽しいSwift!クラスと構造体を知る:)Kanako Kobayashi
 
Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207Svgアニメーションを実装してみよう 20150207
Svgアニメーションを実装してみよう 20150207Kanako Kobayashi
 
javascript を Xcode でテスト
javascript を Xcode でテストjavascript を Xcode でテスト
javascript を Xcode でテストYoichiro Sakurai
 
Java/Androidセキュアコーディング
Java/AndroidセキュアコーディングJava/Androidセキュアコーディング
Java/AndroidセキュアコーディングMasaki Kubo
 
Scala界隈の近況
Scala界隈の近況Scala界隈の近況
Scala界隈の近況takezoe
 
SwiftUIのライブコーディングするとxcodeが◯回落ちる
SwiftUIのライブコーディングするとxcodeが◯回落ちるSwiftUIのライブコーディングするとxcodeが◯回落ちる
SwiftUIのライブコーディングするとxcodeが◯回落ちるKaname Noto
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Tomoki Hasegawa
 
Objective-C/Swift コードの共用
Objective-C/Swift コードの共用Objective-C/Swift コードの共用
Objective-C/Swift コードの共用Yoichiro Sakurai
 
Asakusaソースコードリーディング #4 – Asakusa Test Driver
Asakusaソースコードリーディング #4 – Asakusa Test DriverAsakusaソースコードリーディング #4 – Asakusa Test Driver
Asakusaソースコードリーディング #4 – Asakusa Test Driverapirakun
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門irix_jp
 
Wwdc2015 ios9あれこれ
Wwdc2015 ios9あれこれWwdc2015 ios9あれこれ
Wwdc2015 ios9あれこれakihiro uehara
 
Swift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansaiSwift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansaiSyo Ikeda
 
多分モダンなWebアプリ開発
多分モダンなWebアプリ開発多分モダンなWebアプリ開発
多分モダンなWebアプリ開発tak-nakamura
 

Similar to Swift Library (20)

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

More from Kosuke Usami

View 系ライブラリに関する悩み
View 系ライブラリに関する悩みView 系ライブラリに関する悩み
View 系ライブラリに関する悩みKosuke Usami
 
Xamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作るXamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作るKosuke Usami
 
iBeacon Applications
iBeacon ApplicationsiBeacon Applications
iBeacon ApplicationsKosuke Usami
 
JXUG Conference 2 West
JXUG Conference 2 WestJXUG Conference 2 West
JXUG Conference 2 WestKosuke Usami
 
すごいHaskell読書会
すごいHaskell読書会すごいHaskell読書会
すごいHaskell読書会Kosuke Usami
 
Semantic Versioning
Semantic VersioningSemantic Versioning
Semantic VersioningKosuke Usami
 
Mac アプリの Retina 対応
Mac アプリの Retina 対応Mac アプリの Retina 対応
Mac アプリの Retina 対応Kosuke Usami
 
Mountain Lion Sharing Service
Mountain Lion Sharing ServiceMountain Lion Sharing Service
Mountain Lion Sharing ServiceKosuke Usami
 
OS X LionのVersions対応
OS X LionのVersions対応OS X LionのVersions対応
OS X LionのVersions対応Kosuke Usami
 

More from Kosuke Usami (20)

SnapKit
SnapKitSnapKit
SnapKit
 
View 系ライブラリに関する悩み
View 系ライブラリに関する悩みView 系ライブラリに関する悩み
View 系ライブラリに関する悩み
 
RxSwift
RxSwiftRxSwift
RxSwift
 
Auto Layout Tips
Auto Layout TipsAuto Layout Tips
Auto Layout Tips
 
RxSwift x APIKit
RxSwift x APIKitRxSwift x APIKit
RxSwift x APIKit
 
RxSwift x Realm
RxSwift x RealmRxSwift x Realm
RxSwift x Realm
 
RxSwift
RxSwiftRxSwift
RxSwift
 
Eddystone Beacon
Eddystone BeaconEddystone Beacon
Eddystone Beacon
 
Xamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作るXamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作る
 
iBeacon Applications
iBeacon ApplicationsiBeacon Applications
iBeacon Applications
 
APIKit
APIKitAPIKit
APIKit
 
JXUG Conference 2 West
JXUG Conference 2 WestJXUG Conference 2 West
JXUG Conference 2 West
 
すごいHaskell読書会
すごいHaskell読書会すごいHaskell読書会
すごいHaskell読書会
 
Xamarin.iOS
Xamarin.iOSXamarin.iOS
Xamarin.iOS
 
CotEditor Script
CotEditor ScriptCotEditor Script
CotEditor Script
 
Affine Transform
Affine TransformAffine Transform
Affine Transform
 
Semantic Versioning
Semantic VersioningSemantic Versioning
Semantic Versioning
 
Mac アプリの Retina 対応
Mac アプリの Retina 対応Mac アプリの Retina 対応
Mac アプリの Retina 対応
 
Mountain Lion Sharing Service
Mountain Lion Sharing ServiceMountain Lion Sharing Service
Mountain Lion Sharing Service
 
OS X LionのVersions対応
OS X LionのVersions対応OS X LionのVersions対応
OS X LionのVersions対応
 

Swift Library