Suche senden
Hochladen
OSSから学ぶSwift実践テクニック
•
4 gefällt mir
•
1,873 views
庸介 高橋
Folgen
Kyobashi.swiftで発表した内容です。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 16
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Deep dive into oss written in swift
Deep dive into oss written in swift
Yuki Asai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
Jun Ohtani
GraphQL入門
GraphQL入門
Kent Ohashi
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
Masashi Shinbara
What is doobie? - database access for scala -
What is doobie? - database access for scala -
chibochibo
Empfohlen
Deep dive into oss written in swift
Deep dive into oss written in swift
Yuki Asai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Tomohiro Kumagai
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
TanUkkii
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
Jun Ohtani
GraphQL入門
GraphQL入門
Kent Ohashi
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
PHPコードではなく PHPコードの「書き方」を知る
PHPコードではなく PHPコードの「書き方」を知る
Masashi Shinbara
What is doobie? - database access for scala -
What is doobie? - database access for scala -
chibochibo
Everyday Life with clojure.spec
Everyday Life with clojure.spec
Kent Ohashi
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
How Smalltalker Works
How Smalltalker Works
Sho Yoshida
Echo server implementation for Python
Echo server implementation for Python
Toshiki Tsuboi
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
fukamachi
scala-kaigi1-sbt
scala-kaigi1-sbt
Kenji Yoshida
Shelly
Shelly
fukamachi
Scala on Hadoop
Scala on Hadoop
Shinji Tanaka
第8回KPF発表資料
第8回KPF発表資料
cryks
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編
Shota Baba
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
TanUkkii
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
はてなブックマーク in Scala
はてなブックマーク in Scala
Lintaro Ina
20140930 anything as_code
20140930 anything as_code
Sugawara Genki
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
Kent Ohashi
Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表
Akihiro Harai
Google Gears データベースの基礎
Google Gears データベースの基礎
webos-goodies
try!swift必見5選
try!swift必見5選
Kenta Kudo
FriendlyErrorType
FriendlyErrorType
naoty_bot
Extra view @ kyobashi.swift
Extra view @ kyobashi.swift
Keisuke Tsukagoshi
Weitere ähnliche Inhalte
Was ist angesagt?
Everyday Life with clojure.spec
Everyday Life with clojure.spec
Kent Ohashi
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
How Smalltalker Works
How Smalltalker Works
Sho Yoshida
Echo server implementation for Python
Echo server implementation for Python
Toshiki Tsuboi
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
fukamachi
scala-kaigi1-sbt
scala-kaigi1-sbt
Kenji Yoshida
Shelly
Shelly
fukamachi
Scala on Hadoop
Scala on Hadoop
Shinji Tanaka
第8回KPF発表資料
第8回KPF発表資料
cryks
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編
Shota Baba
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
TanUkkii
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
はてなブックマーク in Scala
はてなブックマーク in Scala
Lintaro Ina
20140930 anything as_code
20140930 anything as_code
Sugawara Genki
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
Kent Ohashi
Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表
Akihiro Harai
Google Gears データベースの基礎
Google Gears データベースの基礎
webos-goodies
try!swift必見5選
try!swift必見5選
Kenta Kudo
Was ist angesagt?
(20)
Everyday Life with clojure.spec
Everyday Life with clojure.spec
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
How Smalltalker Works
How Smalltalker Works
Echo server implementation for Python
Echo server implementation for Python
Integral - New O/R Mapper for Common Lisp
Integral - New O/R Mapper for Common Lisp
scala-kaigi1-sbt
scala-kaigi1-sbt
Shelly
Shelly
Scala on Hadoop
Scala on Hadoop
第8回KPF発表資料
第8回KPF発表資料
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
知って得するC# LINQ to Objects編
知って得するC# LINQ to Objects編
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
ScalaMatsuri 2016
ScalaMatsuri 2016
はてなブックマーク in Scala
はてなブックマーク in Scala
20140930 anything as_code
20140930 anything as_code
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
Java EE勉強会 開発合宿 成果発表
Java EE勉強会 開発合宿 成果発表
Google Gears データベースの基礎
Google Gears データベースの基礎
try!swift必見5選
try!swift必見5選
Andere mochten auch
FriendlyErrorType
FriendlyErrorType
naoty_bot
Extra view @ kyobashi.swift
Extra view @ kyobashi.swift
Keisuke Tsukagoshi
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
庸介 高橋
お申し込みを1割増やしたフォーム改善の話
お申し込みを1割増やしたフォーム改善の話
lolipopjp
AWS Mobile Maniacs
AWS Mobile Maniacs
akitsukada
IoTをインターネット越しで見る
IoTをインターネット越しで見る
tnoho
Swiftのswitchはとってもパワフル!
Swiftのswitchはとってもパワフル!
akatsuki174
5分でわかるText Kit
5分でわかるText Kit
Ryota Hayashi
Can we live in a pure Swift world?
Can we live in a pure Swift world?
toyship
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
Reiko Gotou
watchOS1 to watchOS2
watchOS1 to watchOS2
Motoki Narita
Core dataと比較してrealmを使ったまとめ
Core dataと比較してrealmを使ったまとめ
Fumiya Sakai
脱swift初心者するための2つのきっかけ
脱swift初心者するための2つのきっかけ
Daiki Mogmet Ito
リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__
Tomohiro Kumagai
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱い
niwatako
とにかく明るいCore Spotlight
とにかく明るいCore Spotlight
今城 善矩
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作った
Tomoki Hasegawa
PUSH通知の許可をよりもらうためのUI考察など
PUSH通知の許可をよりもらうためのUI考察など
Tsuyoshi Yonemoto
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
Command Line Tool in swift
Command Line Tool in swift
Yusuke Kita
Andere mochten auch
(20)
FriendlyErrorType
FriendlyErrorType
Extra view @ kyobashi.swift
Extra view @ kyobashi.swift
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
お申し込みを1割増やしたフォーム改善の話
お申し込みを1割増やしたフォーム改善の話
AWS Mobile Maniacs
AWS Mobile Maniacs
IoTをインターネット越しで見る
IoTをインターネット越しで見る
Swiftのswitchはとってもパワフル!
Swiftのswitchはとってもパワフル!
5分でわかるText Kit
5分でわかるText Kit
Can we live in a pure Swift world?
Can we live in a pure Swift world?
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
watchOS1 to watchOS2
watchOS1 to watchOS2
Core dataと比較してrealmを使ったまとめ
Core dataと比較してrealmを使ったまとめ
脱swift初心者するための2つのきっかけ
脱swift初心者するための2つのきっかけ
リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱い
とにかく明るいCore Spotlight
とにかく明るいCore Spotlight
PUSH通知証明書作成ツールを作った
PUSH通知証明書作成ツールを作った
PUSH通知の許可をよりもらうためのUI考察など
PUSH通知の許可をよりもらうためのUI考察など
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
Command Line Tool in swift
Command Line Tool in swift
Ähnlich wie OSSから学ぶSwift実践テクニック
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
uedayou
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
Kazunari Hara
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Kazuki Nakajima
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
Shogo Sensui
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
Akinari Tsugo
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
初めての Data api
初めての Data api
Yuji Takayama
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
kimukou_26 Kimukou
named_scope more detail - WebCareer
named_scope more detail - WebCareer
Kyosuke MOROHASHI
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
Yuji Takayama
WordBench京都12月、WordCampUSからのWP REST APIな話
WordBench京都12月、WordCampUSからのWP REST APIな話
Hidetaka Okamoto
Teclab3
Teclab3
Eikichi Yamaguchi
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
Django boodoo
Django boodoo
泰 増田
Apache Torqueについて
Apache Torqueについて
tako pons
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
Yosuke Furukawa
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Shoot Morii
Project lambda
Project lambda
Appresso Engineering Team
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
Masanobu Sato
Ähnlich wie OSSから学ぶSwift実践テクニック
(20)
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
ふぉとぶらり+LODAC -iPhoneアプリでのSPARQLでの活用事例-
Spring data-rest-and-spring-cloud-contract
Spring data-rest-and-spring-cloud-contract
速くなければスマフォじゃない - インターンバージョン-
速くなければスマフォじゃない - インターンバージョン-
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
Develop Web Application with Node.js + Express
Develop Web Application with Node.js + Express
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
初めての Data api
初めての Data api
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
named_scope more detail - WebCareer
named_scope more detail - WebCareer
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
WordBench京都12月、WordCampUSからのWP REST APIな話
WordBench京都12月、WordCampUSからのWP REST APIな話
Teclab3
Teclab3
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Django boodoo
Django boodoo
Apache Torqueについて
Apache Torqueについて
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Project lambda
Project lambda
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
Mehr von 庸介 高橋
Cookpad TechConf 2019 - Build Chat with Firestore
Cookpad TechConf 2019 - Build Chat with Firestore
庸介 高橋
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
庸介 高橋
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
庸介 高橋
LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信
庸介 高橋
tvOS開発前に確認すべきこと
tvOS開発前に確認すべきこと
庸介 高橋
Jenkins + Deploygateを使った簡単ベータ配信
Jenkins + Deploygateを使った簡単ベータ配信
庸介 高橋
Swift3とObjective-Cのブリッジでハマったこと
Swift3とObjective-Cのブリッジでハマったこと
庸介 高橋
家族の「ただいま」を教えてくれるキーホルダー NFC版
家族の「ただいま」を教えてくれるキーホルダー NFC版
庸介 高橋
カラオケ曲管理アプリを作りました
カラオケ曲管理アプリを作りました
庸介 高橋
Mehr von 庸介 高橋
(9)
Cookpad TechConf 2019 - Build Chat with Firestore
Cookpad TechConf 2019 - Build Chat with Firestore
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
LIFULL HOME'S Firebaseによる特集配信
LIFULL HOME'S Firebaseによる特集配信
tvOS開発前に確認すべきこと
tvOS開発前に確認すべきこと
Jenkins + Deploygateを使った簡単ベータ配信
Jenkins + Deploygateを使った簡単ベータ配信
Swift3とObjective-Cのブリッジでハマったこと
Swift3とObjective-Cのブリッジでハマったこと
家族の「ただいま」を教えてくれるキーホルダー NFC版
家族の「ただいま」を教えてくれるキーホルダー NFC版
カラオケ曲管理アプリを作りました
カラオケ曲管理アプリを作りました
OSSから学ぶSwift実践テクニック
1.
OSSから学ぶ Swift実践テクニック Takahashi Yosuke @yousan
2.
自己紹介 • Takahashi Yosuke •
株式会社ネクスト HOME Sアプリ • モバイルアプリエンジニア • 趣味 テニス 錦織に似ていると言われる
3.
OSSを使う前に コードリーディングしてみると いろいろ勉強になる
4.
Alamofire https://github.com/Alamofire/Alamofire
5.
ProtocolとExtensionで 組み込み型を抽象化
6.
request Alamofire.request(.GET, "https://httpbin.org/get") README.md
7.
requestの定義 public func request( method:
Method, _ URLString: URLStringConvertible, parameters: [String: AnyObject]? = nil, encoding: ParameterEncoding = .URL, headers: [String: String]? = nil) -> Request { return Manager.sharedInstance.request( method, URLString, parameters: parameters, encoding: encoding, headers: headers ) } Stringじゃない! Alamofire.swift
8.
URLStringConvertible public protocol URLStringConvertible
{ ∼中略∼ var URLString: String { get } } extension String: URLStringConvertible { public var URLString: String { return self } } extension NSURL: URLStringConvertible { public var URLString: String { return absoluteString } } extension NSURLComponents: URLStringConvertible { public var URLString: String { return URL!.URLString } } extension NSURLRequest: URLStringConvertible { public var URLString: String { return URL!.URLString } } String NSURL NSURLComponents NSURLRequest 全てをrequestの引数に使える Alamofire.swift
9.
Protocolごとに Extensionを分ける
10.
public struct Response<Value,
Error: ErrorType> { public let request: NSURLRequest? public let response: NSHTTPURLResponse? public let data: NSData? public let result: Result<Value, Error> public init(request: NSURLRequest?, response: NSHTTPURLResponse?, data: NSData?, result: Result<Value, Erro self.request = request self.response = response self.data = data self.result = result } } extension Response: CustomStringConvertible { public var description: String { return result.debugDescription } } extension Response: CustomDebugStringConvertible { public var debugDescription: String { var output: [String] = [] output.append(request != nil ? "[Request]: (request!)" : "[Request]: nil") output.append(response != nil ? "[Response]: (response!)" : "[Response]: nil") output.append("[Data]: (data?.length ?? 0) bytes") output.append("[Result]: (result.debugDescription)") return output.joinWithSeparator("n") } } Response.swift(コメント省略)
11.
普通に書くとこんな感じ public struct Response<Value,
Error: ErrorType>: CustomStringConvertible, CustomDebugStringConvertible { public let request: NSURLRequest? public let response: NSHTTPURLResponse? public let data: NSData? public let result: Result<Value, Error> public init(request: NSURLRequest?, response: NSHTTPURLResponse?, data: NSData?, result: Result<Value, Erro self.request = request self.response = response self.data = data self.result = result } // MARK: - CustomStringConvertible public var description: String { return result.debugDescription } // MARK: - CustomDebugStringConvertible public var debugDescription: String { var output: [String] = [] output.append(request != nil ? "[Request]: (request!)" : "[Request]: nil") output.append(response != nil ? "[Response]: (response!)" : "[Response]: nil") output.append("[Data]: (data?.length ?? 0) bytes") output.append("[Result]: (result.debugDescription)") return output.joinWithSeparator("n") } }
12.
extension使うと見やすい 各Protocolとメソッドの対応が、MARKで区切るより 見やすい。 Protocolとメソッドが近い、括弧によるグルーピング 各Protocolごとに関連するメソッドやサブタイプなどを まとめておけば管理も簡単。 Protocolが不要になったらextensionの範囲丸ごと消せばいい ※ただし、例えばCustomStringConvertibleのextension内に descriptionがある保証はないし、関係ないメソッドが書かれる可能 性もあるので注意。
13.
メソッドチェーンで requestを使いやすく
14.
public func authenticate(usingCredential
credential: NSURLCredential) -> Self { delegate.credential = credential return self } public func progress(closure: ((Int64, Int64, Int64) -> Void)? = nil) -> Self { if let uploadDelegate = delegate as? UploadTaskDelegate { uploadDelegate.uploadProgress = closure } else if let dataDelegate = delegate as? DataTaskDelegate { dataDelegate.dataProgress = closure } else if let downloadDelegate = delegate as? DownloadTaskDelegate { downloadDelegate.downloadProgress = closure } return self } public func stream(closure: (NSData -> Void)? = nil) -> Self { if let dataDelegate = delegate as? DataTaskDelegate { dataDelegate.dataStream = closure } return self } Request.swift オプションを追加したついでに 最後にselfを返す
15.
大量オプションでも見やすい Alamofire.request(.GET, “https://httpbin.org/") .authenticate(usingCredential: credential) .progress(closure) .validate(statusCode:
200..<300) .validate(contentType: ["application/json"]) .response { response in print(response) } ・余分な変数が不要 ・書きやすいし読みやすい
16.
まとめ コードを書くのも大切だけど 他人のコードを読むのも重要
Jetzt herunterladen