Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
toyship
PDF, PPTX
1,452 views
Swift Protocol and Selector
We cannot use protocol extension as a selector?
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 18
2
/ 18
3
/ 18
4
/ 18
5
/ 18
6
/ 18
7
/ 18
8
/ 18
9
/ 18
10
/ 18
11
/ 18
12
/ 18
13
/ 18
14
/ 18
15
/ 18
16
/ 18
17
/ 18
18
/ 18
More Related Content
PDF
Embedded framework and so on
by
toyship
PDF
ようこそ! Swift Playgroundsへ
by
KinkumaDesign
PDF
Swift勉強会
by
Nagamine Hiromasa
PDF
みんなでおばけになる #mlkcca
by
Hikari Fukasawa
PDF
【B-1】kintoneでお手軽コールセンター!
by
Sakae Saito
PDF
laravel x モバイルアプリ
by
Masaki Oshikawa
PDF
Laravel5を使って開発してみた
by
Takeo Noda
PDF
Spring Bootキャンプ @関ジャバ #kanjava_sbc
by
Toshiaki Maki
Embedded framework and so on
by
toyship
ようこそ! Swift Playgroundsへ
by
KinkumaDesign
Swift勉強会
by
Nagamine Hiromasa
みんなでおばけになる #mlkcca
by
Hikari Fukasawa
【B-1】kintoneでお手軽コールセンター!
by
Sakae Saito
laravel x モバイルアプリ
by
Masaki Oshikawa
Laravel5を使って開発してみた
by
Takeo Noda
Spring Bootキャンプ @関ジャバ #kanjava_sbc
by
Toshiaki Maki
What's hot
PDF
最近のSpringFramework2013 #jjug #jsug #SpringFramework
by
Toshiaki Maki
PDF
【Camphor ×サイボウズ】selenium勉強会
by
Yuki Okada
PDF
milkcocoa入門@milkcocoa meetup#1
by
Syuhei Hiya
PDF
Java + React.jsでSever Side Rendering #reactjs_meetup
by
Toshiaki Maki
PDF
Java Day Tokyo 2013 Java the Night 監視ツールでみるJavaFXとJava EEの魅力
by
Takashi Aoe
PDF
Jsug spring bootコードリーディング 接触篇 a contact
by
tsukasa tamaru
PDF
OpenShift のある生活
by
Yoshimasa Tanabe
PDF
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
by
Toshiaki Maki
PDF
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
by
松田 千尋
PDF
behatエクステンションの作り方
by
Ryo Tomidokoro
PDF
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5
by
Kenichi Mukai
PDF
Swift入門
by
聡 中川
PDF
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
by
Toshiaki Maki
PDF
iOS 8 Widget ~ 導入から Tips まで
by
Yuki Tanabe
PDF
Java web application testing
by
Tokuhiro Matsuno
PDF
Lt 20150711
by
Tomoyuki Obi
PDF
Griffon10 in groovy_fx
by
kimukou_26 Kimukou
PPTX
<第1回>Laravelハンズオンセミナー
by
Tatsuyoshi Mashiko
PPTX
Selenium2(web driver) ide編
by
Tetsuya Hasegawa
PPTX
20191003 classi night-04
by
Akihiko Kigure
最近のSpringFramework2013 #jjug #jsug #SpringFramework
by
Toshiaki Maki
【Camphor ×サイボウズ】selenium勉強会
by
Yuki Okada
milkcocoa入門@milkcocoa meetup#1
by
Syuhei Hiya
Java + React.jsでSever Side Rendering #reactjs_meetup
by
Toshiaki Maki
Java Day Tokyo 2013 Java the Night 監視ツールでみるJavaFXとJava EEの魅力
by
Takashi Aoe
Jsug spring bootコードリーディング 接触篇 a contact
by
tsukasa tamaru
OpenShift のある生活
by
Yoshimasa Tanabe
Spring Frameworkの今 (2013年版) #jjug_ccc #ccc_r17 #springframework
by
Toshiaki Maki
SeleniumIDEとSelenium WebDriver × Node.js Seleniumで業務効率化する15分
by
松田 千尋
behatエクステンションの作り方
by
Ryo Tomidokoro
第80回 PHP勉強会 / laravel.jp & Laravel Meetup Tokyo Vol.5
by
Kenichi Mukai
Swift入門
by
聡 中川
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
by
Toshiaki Maki
iOS 8 Widget ~ 導入から Tips まで
by
Yuki Tanabe
Java web application testing
by
Tokuhiro Matsuno
Lt 20150711
by
Tomoyuki Obi
Griffon10 in groovy_fx
by
kimukou_26 Kimukou
<第1回>Laravelハンズオンセミナー
by
Tatsuyoshi Mashiko
Selenium2(web driver) ide編
by
Tetsuya Hasegawa
20191003 classi night-04
by
Akihiko Kigure
Similar to Swift Protocol and Selector
PDF
Can we live in a pure Swift world?
by
toyship
PDF
Swift 2.0 で変わったところ「後編」 #cswift
by
Tomohiro Kumagai
PDF
リテラルと型の続きの話 #__swift__
by
Tomohiro Kumagai
PDF
Swift 2.0 で変わったところ「前編」 #cswift
by
Tomohiro Kumagai
PDF
Swift 2.0 大域関数の行方から #swift2symposium
by
Tomohiro Kumagai
PDF
OSSから学ぶSwift実践テクニック
by
庸介 高橋
PDF
Swift事情2014夏 ~ Swift入門 beta6対応
by
Tomoki Hasegawa
PDF
プロトコル指向に想う世界観 #__swift__
by
Tomohiro Kumagai
PDF
Swift 3 その基本ルールを眺める #cswift
by
Tomohiro Kumagai
Can we live in a pure Swift world?
by
toyship
Swift 2.0 で変わったところ「後編」 #cswift
by
Tomohiro Kumagai
リテラルと型の続きの話 #__swift__
by
Tomohiro Kumagai
Swift 2.0 で変わったところ「前編」 #cswift
by
Tomohiro Kumagai
Swift 2.0 大域関数の行方から #swift2symposium
by
Tomohiro Kumagai
OSSから学ぶSwift実践テクニック
by
庸介 高橋
Swift事情2014夏 ~ Swift入門 beta6対応
by
Tomoki Hasegawa
プロトコル指向に想う世界観 #__swift__
by
Tomohiro Kumagai
Swift 3 その基本ルールを眺める #cswift
by
Tomohiro Kumagai
More from toyship
PDF
Time for Xcode Behavior
by
toyship
PDF
Notifications in iOS10
by
toyship
PDF
Universal Link
by
toyship
PDF
What's new Swift3
by
toyship
PDF
Xcode7時代のアプリ配布
by
toyship
PDF
My first tvOS
by
toyship
PDF
3D touch for iOS
by
toyship
PDF
Contents blocker on iOS9
by
toyship
PDF
はじめてのWKInterfaceController
by
toyship
PDF
App extension for iOS
by
toyship
PDF
サーバーからiOSアプリを変更する
by
toyship
PDF
Xcode bot
by
toyship
PDF
AVSpeechSynthesizerとロケール
by
toyship
Time for Xcode Behavior
by
toyship
Notifications in iOS10
by
toyship
Universal Link
by
toyship
What's new Swift3
by
toyship
Xcode7時代のアプリ配布
by
toyship
My first tvOS
by
toyship
3D touch for iOS
by
toyship
Contents blocker on iOS9
by
toyship
はじめてのWKInterfaceController
by
toyship
App extension for iOS
by
toyship
サーバーからiOSアプリを変更する
by
toyship
Xcode bot
by
toyship
AVSpeechSynthesizerとロケール
by
toyship
Swift Protocol and Selector
1.
Swi$%Protocol%and%Selector 2016/02/06 @TachibanaKaoru
2.
自己紹介 渋谷のVOYAGE'GROUPでiOSエンジニア をしています。 Twi$er:(@TachibanaKaoru Blog(:(h$p://www.toyship.org/ 朝時間jpというアプリをだしてます。
3.
try!%Swi) • h#p://tryswi-conf.com/ • 2016/3/293/4 •
VOYAGEAGROUPはtry!ASwi-のスポンサーをしています。
4.
iOS$Developers$Conference$2016 *"h$ps://iosdc.jp *"2016/08/20 *"@iosdcjp
5.
Swi$%Protocol%Extension Swi$%2.0から導入された機能。いままでインターフェース定義と してしか使えなかったProtocolの実装部分も共通化できるように なりました。
6.
デバッグ出力を共通化してみる例 • こんなデバッグ出力用のプロトコルを作ったとします。 protocol DebugLog
{ func writeDebugMessage() -> Void }
7.
デバッグ出力を共通化してみる例 • Swi%1.0ではこのプロトコルに適合しているクラスで実装を書 く必要がありました。 class ElmViewController
: UIViewController, DebugLog { override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) writeDebugMessage() } func writeDebugMessage() -> Void{ print("デバッグ出力の実装をここでする") } }
8.
デバッグ出力を共通化してみる例 • Swi%&2.0では、プロトコル側にデフォルトの実装をかくことが できます。 protocol DebugLog
{ func writeDebugMessage() -> Void } extension DebugLog { func writeDebugMessage() -> Void{ print("Protocol extensionで共通化されたデバッグ出力です。") } }
9.
デバッグ出力を共通化してみる例 • Swi%2.0ではこのプロトコルに適合すれば実装を書く必要がな くなりました。 class ElmViewController
: UIViewController, DebugLog { override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) writeDebugMessage() } // 書かなくていい // func writeDebugMessage() -> Void{ // print("デバッグ出力の実装をここでする") // } }
10.
デバッグ出力を共通化してみる例 • では、もし、Swi%2.0で処理が共通化されているプロトコルに ついて、自分のクラスで実装を書いたらどうなるでしょうか。 • 自分のクラスの実装コードが実行されます class
ElmViewController : UIViewController, DebugLog { override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) writeDebugMessage() } func writeDebugMessage() -> Void{ print("デバッグ出力の実装をここでする") } }
11.
Swi$%2.0%Protocol%Extension • プロトコル側に共通実装をもたせることで、実装を共通化でき るが、上書きすることでクラスごとの独自処理にすることもで きる
12.
Swi$%2.0%Protocol%Extension • protocolを適合しているクラスによって実装を変更したりも可 能 protocol DebugLog
{ func writeDebugMessage() -> Void } extension DebugLog { func writeDebugMessage() -> Void{ print("Protocol extensionで共通化されたデバッグ出力です。") } } extension DebugLog where Self : UIViewController{ func writeDebugMessage() -> Void{ print("Protocol extensionで共通化されたデバッグ出力です。(ただし、selfがUIViewControllerです)") } }
13.
プロトコルで実装したものをSelectorとしてよんでみる • 下記のように、自分で実装しているProtocolをselectorでよびだ す。>実行される class ElmViewController
: UIViewController, DebugLog { override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) performSelector("writeDebugMessage") } func writeDebugMessage() -> Void{ print("デバッグ出力の実装をここでする") } }
14.
プロトコルで実装したものをSelectorとしてよんでみる • 下記のように、2.0のProtocol+extensionをselectorでよびだして みましょう class ElmViewController
: UIViewController, DebugLog { override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) performSelector("writeDebugMessage") } }
15.
プロトコルで実装したものをSelectorとしてよんでみる • 下記のように、2.0のProtocol+extensionをselectorでよびだす。 • 実行時エラーとなります [Forest.ElmViewController
writeDebugMessage]: unrecognized selector sent to instance
16.
Protocol'Extensionで実装したメソッドは Selectorとして指定することができない
17.
• Apple&Developer&Forumでもまったく同じ話題がでていました。 • Func0on&in&Swi4&2&protocol&extension&returns&unrecognized& selector&when&using&a&UIGestureRecognizer&to&call&it. •
hCps://forums.developer.apple.com/thread/16773
18.
Selectorで指定できないとなにが困るのか。 例えば、UIBu%onのAc*onや、NSTimerやGestureのAc*onなど、 UIKitの主要機能のAc*onの指定をすることができない。
Download