SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
自己紹介
• @mo_to_44
• 株式会社ネクストで  HOME Sという

不動産検索アプリのiOSエンジニアをやっています
個人でもアプリ作ってます
  リボカメ - Revolver Camera
• リボルバーを模したUI
• フィルターをリアルタイムで
切り替え、確認できる
• Apple Watch対応
shibuya.swift #2
http://www.slideshare.net/motokinarita7/swift30-enumerate
swift-evolution
https://github.com/apple/swift-evolution
Swift 3.0 で導入されることが
議論されている
0004: Remove the ++ and -- operators
🎉 Status: Accepted
0007: Remove C-style for-loops with
conditions and incrementers
🎉 Status: Accepted
どうするのか?
enumerate
• SequenceType Protocolに定義されている
• indexと要素のペア(タプル)の配列を取得するこ
とができる
shibuya.swift #2
http://www.slideshare.net/motokinarita7/swift30-enumerate
Swift 3.0に向けて
• C言語スタイルのfor文ではなく、enumerateを積極
的に使っていく
• 同様に ++ や -- も使わないようにする
• swift-evolution/proposal に目を通して、なくなる
かもしれない文法はなるべく使わないようにする
enumerateは

どう実装されているのか?
ソースを見てみる
enumerateは

/stdlib/public/core/SequenceAlgorithms.swift.gyb
にSequenceTypeのProtocol Extensionで定義
https://github.com/apple/swift/blob/master/stdlib/public/core/SequenceAlgorithms.swift.gyb
enumerateは

/stdlib/public/core/SequenceAlgorithms.swift.gyb
にSequenceTypeのProtocol Extensionで定義
https://github.com/apple/swift/blob/master/stdlib/public/core/SequenceAlgorithms.swift.gyb
ちょいちょい出てくる.gyb
• Generate Your Boilerplateの略

と、/blob/master/utils/gyb.py に記載が
ある
• Swiftのプロジェクトで使われている

テンプレート形式
reference: Optionalな文字列同士を良い感じに結合する(ついでにreduceとflatMap
の実装を覗いてみる) http://qiita.com/kazu0620/items/f2a6272c6b8b7bcbaa42
SequenceTypeのProtocol Extension
/stdlib/public/core/SequenceAlgorithms.swift.gyb
戻り値はEnumerateSequence型
/stdlib/public/core/SequenceAlgorithms.swift.gyb
@warn_unused_resultでこの関数を使っていて

戻り値が使われていない場合に警告を出す
/stdlib/public/core/SequenceAlgorithms.swift.gyb
戻り値はEnumerateSequence型
/stdlib/public/core/SequenceAlgorithms.swift.gyb
EnumerateSequenceは

/stdlib/public/core/Algorithm.swift

に定義されている
EnumerateSequenceはSequenceTypeプロトコル
を採用したstruct
/stdlib/public/core/Algorithm.swift
SequenceTypeプロトコル
• SequenceTypeはgenerateメソッドを実装する必要
がある
• そのgenerateメソッドの戻り値はGeneratorType
EnumerateSequenceのgenerateの戻り値は
EnumerateGenerator型
/stdlib/public/core/Algorithm.swift
EnumerateGeneratorはEnumerateSequenceと同じく

/stdlib/public/core/Algorithm.swift

に定義されている
GeneratorTypeプロトコル
• for-in文で利用できるようにするためには、さきほ
どのSequenceTypeとGeneratorTypeを実装する必
要がある(とのこと)
• GeneratorTypeは next メソッドを実装する必要が
ある
• この next メソッドの戻り値がfor-inの中で渡ってく
る値
/stdlib/public/core/Algorithm.swift
EnumerateGeneratorのnextメソッドでタプル
を返している!!
/stdlib/public/core/Algorithm.swift
EnumerateGenerator(struct)はbaseとcount
をプロパティとして保持している
/stdlib/public/core/Algorithm.swift
初期化時、EnumerateGeneratorの
countプロパティは0
/stdlib/public/core/Algorithm.swift
for-inなどでnextが呼ばれるたびにEnumerateGenerator
のcountプロパティをインクリメント
/stdlib/public/core/Algorithm.swift
++ はSwift3.0でなくなるので、

そのうち実装が修正されるはず
まとめ
まとめ
• enumerateはEnumerateSequenceと
EnumerateGeneratorで実装されている
• ++ を使用しているので、Swift3.0のリリース時に
は修正されているはず
ソース読んでみた感想
• Swiftのオープンソース化で気になったことはソー
スを見れるようになったのは便利
• 分からないことがどんどん出てきてかなりビビる
• 勉強不足...
おわり

Contenu connexe

En vedette (8)

TestFlightみたいなのを自作する
TestFlightみたいなのを自作するTestFlightみたいなのを自作する
TestFlightみたいなのを自作する
 
3D touch for iOS
3D touch for iOS3D touch for iOS
3D touch for iOS
 
To learn Interpolator
To learn InterpolatorTo learn Interpolator
To learn Interpolator
 
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
 
Enhancements with 3D Touch
Enhancements with 3D TouchEnhancements with 3D Touch
Enhancements with 3D Touch
 
tvOSでWebSocketを使う
tvOSでWebSocketを使うtvOSでWebSocketを使う
tvOSでWebSocketを使う
 
UIKit Sound
UIKit SoundUIKit Sound
UIKit Sound
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいこと
 

Similaire à Enumerate

とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
mecha mogera
 
python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集
Hikaru Takemura
 

Similaire à Enumerate (20)

Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話
 
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
 
Twitter API
Twitter APITwitter API
Twitter API
 
EC-CUBEユーザカンファレンス2016
EC-CUBEユーザカンファレンス2016EC-CUBEユーザカンファレンス2016
EC-CUBEユーザカンファレンス2016
 
How to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C codeHow to improve Type-safety in your Objective-C code
How to improve Type-safety in your Objective-C code
 
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
とっとるびー第29回発表資料(RICOH THETAの全天球画像を部分転送して遠隔地のOculusでみる)
 
Openshift 20191121
Openshift 20191121Openshift 20191121
Openshift 20191121
 
iOS開発でのおすすめライブラリと管理
iOS開発でのおすすめライブラリと管理iOS開発でのおすすめライブラリと管理
iOS開発でのおすすめライブラリと管理
 
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門
 
クラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccampクラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccamp
 
Nullabilityについて
NullabilityについてNullabilityについて
Nullabilityについて
 
python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集python-twitterを用いたTwitterデータ収集
python-twitterを用いたTwitterデータ収集
 
Fun tech14-alibaba cloud api gateway-swagger
Fun tech14-alibaba cloud api gateway-swaggerFun tech14-alibaba cloud api gateway-swagger
Fun tech14-alibaba cloud api gateway-swagger
 
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-CMix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
 
Osoljp201210 oi swift
Osoljp201210 oi swiftOsoljp201210 oi swift
Osoljp201210 oi swift
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
 
クラウドセキュリティ基礎
クラウドセキュリティ基礎クラウドセキュリティ基礎
クラウドセキュリティ基礎
 
Appcelerator TitaniumでSocket.io (1.x)
Appcelerator TitaniumでSocket.io (1.x)Appcelerator TitaniumでSocket.io (1.x)
Appcelerator TitaniumでSocket.io (1.x)
 
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
 

Plus de Motoki Narita

Plus de Motoki Narita (12)

Type safety WCSession
Type safety WCSessionType safety WCSession
Type safety WCSession
 
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくするNullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
NullabilityとジェネリクスでswiftからObjective-Cのコードを使いやすくする
 
できることから始めるOss活動
できることから始めるOss活動できることから始めるOss活動
できることから始めるOss活動
 
About Swift-Clean
About Swift-CleanAbout Swift-Clean
About Swift-Clean
 
Swift bondさわってみた
Swift bondさわってみたSwift bondさわってみた
Swift bondさわってみた
 
watchOS2 tips
watchOS2 tipswatchOS2 tips
watchOS2 tips
 
個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話個人で開発したアプリがベスト新着に選ばれた話
個人で開発したアプリがベスト新着に選ばれた話
 
Xcode tips
Xcode tipsXcode tips
Xcode tips
 
watchOS1 to watchOS2
watchOS1 to watchOS2watchOS1 to watchOS2
watchOS1 to watchOS2
 
Complication
ComplicationComplication
Complication
 
Watch connectivity
Watch connectivityWatch connectivity
Watch connectivity
 
Optionalの使い方 第1回 Swift勉強会@ネクスト
Optionalの使い方 第1回 Swift勉強会@ネクストOptionalの使い方 第1回 Swift勉強会@ネクスト
Optionalの使い方 第1回 Swift勉強会@ネクスト
 

Dernier

Dernier (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Enumerate