Can we live in a pure Swi. world?
@TachibanaKaoru 2016/2/17
@TachibanaKaoru, 2015 1
About
渋谷のVOYAGE GROUPでiOSエンジニア
をしています。
Twi$er: @TachibanaKaoru
Blog : h$p://www.toyship.org/
@TachibanaKaoru, 2015 2
VOYAGE GROUP
• appe%というグルメアプリや、朝時
間.jpという朝時間活用アプリなどをだ
してます。
• iOS/Android Engineer絶賛募集中です。
• h5p://voyagegroup.com/crew/
recruit/career/android/
• Kotlinで開発してます
@TachibanaKaoru, 2015 3
try! Swi)
• 2016/3/2~3/4 at Shibuya
• h3p://tryswi9conf.com/
• VOYAGE GROUP はtry Swi9のスポンサーです。
@TachibanaKaoru, 2015 4
iOS Developers Conference 2016
• h#ps://iosdc.jp
• iOSおよび周辺技術を題材とした日本国内初の Developer
Conference です。
• 2016/08/20
• スポンサーを募集しています
@TachibanaKaoru, 2015 5
Are you wri*ng Swi. code?
@TachibanaKaoru, 2015 6
...YES!
@TachibanaKaoru, 2015 7
Are you wri*ng Objec*ve-C code?
@TachibanaKaoru, 2015 8
maybe, a li*le...
@TachibanaKaoru, 2015 9
So, can we live in a pure Swi0
world?
@TachibanaKaoru, 2015 10
Unusable Swi- features in ObjC (1)
• Generics
• Tuples
• Enumera0ons defined in Swi7 without Int raw value type
• Structures defined in Swi7
• Top-level func0ons defined in Swi7
• Global Variables defined in Swi7
@TachibanaKaoru, 2015 11
Unusable Swi- features in ObjC (2)
• Typealiases defined in Swi0
• Swi0-style variadics
• Nested types
• Curried func:ons
• Protocol Extension (new from Swi02.0)
@TachibanaKaoru, 2015 12
These are not only unusable from ObjC
• これらの Swi&独自機能は「Objec,ve-Cからよべない」だけで
はない
• 実は、pure Swi& の project でもこの制限がかかる
@TachibanaKaoru, 2015 13
We cannot use them as a selector
• Objec've-Cでよべないものはselectorで指定することができな
い
• performselector 指定することもできない。
• Add-Target 指定することもできない。
@TachibanaKaoru, 2015 14
Ex: Tuples as Selector
• compile OK, unrecognized selector
let mybutton = UIButton(type: UIButtonType.Custom)
mybutton.addTarget(self, action: "currentStatus:",
forControlEvents: UIControlEvents.TouchUpInside)
func presonInformation(sender:AnyObject) -> (name:String,age:Int) {
return ("Ranko Kanzaki",14)
}
@TachibanaKaoru, 2015 15
Ex: String Enum as Selector
• compile OK, unrecognized selector
let mybutton = UIButton(type: UIButtonType.Custom)
mybutton.addTarget(self, action: "currentStatus:",
forControlEvents: UIControlEvents.TouchUpInside)
enum GameStatus {
case Start
case End
}
func currentStatus(sender:AnyObject) -> GameStatus{
return GameStatus.Start
}
@TachibanaKaoru, 2015 16
Ex: Protocol Extension as Selector
• compile OK, unrecognized selector
let mybutton = UIButton(type: UIButtonType.Custom)
mybutton.addTarget(self, action: "currentStatus:",
forControlEvents: UIControlEvents.TouchUpInside)
protocol DebugLog {
func writeDebugMessage() -> Void
}
extension DebugLog {
func writeDebugMessage() -> Void{
print("Protocol extensionで共通化されたデバッグ出力です。")
}
}
@TachibanaKaoru, 2015 17
Same for @nonobjc
• @nonobjc は、Objec+ve-Cと互換性のあるSwi2 featureにつけ
るとObjec+ve-Cから使えなくなる指定子(@objcの逆)
• compile OK, unrecognized selector
let mybutton = UIButton(type: UIButtonType.Custom)
mybutton.addTarget(self, action: "currentHP:", forControlEvents: UIControlEvents.TouchUpInside)
@nonobjc
func currentHP(sender:AnyObject) -> Int{
return 0
}
@TachibanaKaoru, 2015 18
We cannot use Swi.-only features as a
selector
• 「Objec've-Cからよべないもの」は、selectorに指定できない
@TachibanaKaoru, 2015 19
What "usable from ObjC" means?
• 「Objec've-Cからよべる」とは?
• Swi. Compile 時に作成される Objec've-C member table に
入っているかどうか
@TachibanaKaoru, 2015 20
Objec&ve-C member table
• h#ps://github.com/apple/swi5/blob/master/lib/AST/
NameLookup.cpp
void ClassDecl::createObjCMethodLookup() {
assert(!ObjCMethodLookup && "Already have an Objective-C member table");
auto &ctx = getASTContext();
ObjCMethodLookup = new (ctx) ObjCMethodLookupTable();
// Register a cleanup with the ASTContext to call the lookup table
// destructor.
ctx.addCleanup([this]() {
this->ObjCMethodLookup->destroy();
});
}
@TachibanaKaoru, 2015 21
Is this method "usable
from ObjC" ?
• 実装時に、特定のメソッドが
Objec've-Cから使えるのかどうか確認
するのであれば、MyProject-Swi4.hで
確認しましょう
• ビルド時に中間生成物として作成さ
れています
• Xcodeでは右の方法で見ることがで
きます
@TachibanaKaoru, 2015 22
In "MyProject-Swi2.h"
• ObjC signature
• Protocol Extensionのsignatureはadoptしているclassではない
SWIFT_PROTOCOL("_TtP6Forest8DebugLog_")
@protocol DebugLog
- (void)writeDebugMessage;
@end
SWIFT_CLASS("_TtC6Forest17ElmViewController")
@interface ElmViewController : UIViewController <UINavigationControllerDelegate>
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidDisappear:(BOOL)animated;
- (void)showTestMessage:(NSString * __nullable)message;
- (nonnull instancetype)initWithNibName:(NSString * __nullable)nibNameOrNil bundle:(NSBundle * __nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * __nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
@TachibanaKaoru, 2015 23
Recap
• S#ll, we cannot live in a pure Swi3 world...
• Pure Swi3 UI Framework が欲しい。
@TachibanaKaoru, 2015 24

More Related Content

PDF
AndroidアプリのUI/UX改善例
PDF
PUSH通知証明書作成ツールを作った
PDF
Realm meetup LT大会(Androidアプリへの適用経験談)
PPTX
[ABC2016S]Android Wear アプリ開発入門
PDF
Android 6.0 Marshmallow 指紋認証対応のポイント
PDF
[Stack Overflow Dev Days 2015]Android 6.0 Marshmallow App Permissions 応用編
PDF
[potatotips #18] Android M Developer Preview & Wear 最新トピック
PDF
Alternative WebView
AndroidアプリのUI/UX改善例
PUSH通知証明書作成ツールを作った
Realm meetup LT大会(Androidアプリへの適用経験談)
[ABC2016S]Android Wear アプリ開発入門
Android 6.0 Marshmallow 指紋認証対応のポイント
[Stack Overflow Dev Days 2015]Android 6.0 Marshmallow App Permissions 応用編
[potatotips #18] Android M Developer Preview & Wear 最新トピック
Alternative WebView

What's hot (20)

PDF
20161014 vrarmr勉強会発表資料 slideshare
PDF
Android Wear 最新トピック
PDF
Android Wearの概要とアプリ開発の基礎
PDF
過去に自作したGoプロダクトの紹介 - Goオールスターズ
PDF
Android Wearアプリ開発経験談
PDF
Android Wearアプリ プレビュー版→正式版への移植ガイド
PDF
アプリリリース後に後悔しないための20のこと
PDF
楽しいものづくり ファーストステップ
PDF
20161125 Unity-Android連携の発表資料
PDF
Cordova利用アプリ開発経験談
PDF
Meta2を動かしてみたことのまとめ
PDF
Monaca+Onsen UIで作るアプリ事始め
PDF
HTML5ハイブリッド アプリ開発の実践〜開発現場ですぐに活かせるコツを伝授〜
PDF
20160902 unity勉強会発表資料
PDF
Androidとは何か
PDF
Meta1のSLAM機能を試してみた
PPTX
Androidをやっただけで iOSアプリもできればいいのに 〜MOEという選択〜
PDF
20160723 unibook lt大会_発表資料(HoloLensのアプリ開発)
PDF
はやわかりHTML5ハイブリッドアプリ開発事情
PDF
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
20161014 vrarmr勉強会発表資料 slideshare
Android Wear 最新トピック
Android Wearの概要とアプリ開発の基礎
過去に自作したGoプロダクトの紹介 - Goオールスターズ
Android Wearアプリ開発経験談
Android Wearアプリ プレビュー版→正式版への移植ガイド
アプリリリース後に後悔しないための20のこと
楽しいものづくり ファーストステップ
20161125 Unity-Android連携の発表資料
Cordova利用アプリ開発経験談
Meta2を動かしてみたことのまとめ
Monaca+Onsen UIで作るアプリ事始め
HTML5ハイブリッド アプリ開発の実践〜開発現場ですぐに活かせるコツを伝授〜
20160902 unity勉強会発表資料
Androidとは何か
Meta1のSLAM機能を試してみた
Androidをやっただけで iOSアプリもできればいいのに 〜MOEという選択〜
20160723 unibook lt大会_発表資料(HoloLensのアプリ開発)
はやわかりHTML5ハイブリッドアプリ開発事情
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
Ad

Viewers also liked (18)

PDF
5分でわかるText Kit
PDF
脱swift初心者するための2つのきっかけ
PDF
iOS の通信における認証の種類とその取り扱い
PDF
PUSH通知の許可をよりもらうためのUI考察など
PDF
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
PDF
watchOS1 to watchOS2
PDF
とにかく明るいCore Spotlight
PDF
Command Line Tool in swift
PDF
動画のあれこれ
PDF
チュートリアルをリッチにしよう
PPTX
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
PDF
教育の生産性へそれに辿りつかない物語
PDF
OSSから学ぶSwift実践テクニック
PDF
iOS WebView App
PDF
最近遊んだ Wii Uの 3つのソフトの感想
PPTX
これからの時代に! パソコン離れの中のパソコン選び
PDF
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
PDF
Prottとsketchとzeplinのススメ
5分でわかるText Kit
脱swift初心者するための2つのきっかけ
iOS の通信における認証の種類とその取り扱い
PUSH通知の許可をよりもらうためのUI考察など
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
watchOS1 to watchOS2
とにかく明るいCore Spotlight
Command Line Tool in swift
動画のあれこれ
チュートリアルをリッチにしよう
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
教育の生産性へそれに辿りつかない物語
OSSから学ぶSwift実践テクニック
iOS WebView App
最近遊んだ Wii Uの 3つのソフトの感想
これからの時代に! パソコン離れの中のパソコン選び
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
Prottとsketchとzeplinのススメ
Ad

Similar to Can we live in a pure Swift world? (20)

PDF
Wolcome to swift
PDF
Swift Protocol and Selector
PDF
Swiftのアプリ開発でハマったこと
PDF
オープンソースエコシステム #demodaytokyo
PDF
Swift を振り返ってみよう #cswift
PDF
Swift入門おさらい
PDF
Swift らしい表現を目指そう #eventdots
PDF
Swift 2.0 大域関数の行方から #swift2symposium
PDF
Swift 2.0 で変わったところ「後編」 #cswift
PDF
Swiftおさらい
PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
PDF
Swift勉強会
PDF
Objective-C Generics
PDF
プロトコル指向に想う世界観 #__swift__
PDF
Swift Library
PDF
What's new Swift3
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
PDF
ジェネリック関数の呼び出され方 #cocoa_kansai
PDF
var RAC3 = ReactiveCocoa + Swift
PDF
Saitama beginner tips50
Wolcome to swift
Swift Protocol and Selector
Swiftのアプリ開発でハマったこと
オープンソースエコシステム #demodaytokyo
Swift を振り返ってみよう #cswift
Swift入門おさらい
Swift らしい表現を目指そう #eventdots
Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 で変わったところ「後編」 #cswift
Swiftおさらい
iPhoneアプリ開発の歩き方〜Swift編〜
Swift勉強会
Objective-C Generics
プロトコル指向に想う世界観 #__swift__
Swift Library
What's new Swift3
メルカリ・ソウゾウでは どうGoを活用しているのか?
ジェネリック関数の呼び出され方 #cocoa_kansai
var RAC3 = ReactiveCocoa + Swift
Saitama beginner tips50

More from toyship (13)

PDF
Time for Xcode Behavior
PDF
Notifications in iOS10
PDF
Universal Link
PDF
Xcode7時代のアプリ配布
PDF
My first tvOS
PDF
3D touch for iOS
PDF
Contents blocker on iOS9
PDF
Embedded framework and so on
PDF
はじめてのWKInterfaceController
PDF
App extension for iOS
PDF
サーバーからiOSアプリを変更する
PDF
Xcode bot
PDF
AVSpeechSynthesizerとロケール
Time for Xcode Behavior
Notifications in iOS10
Universal Link
Xcode7時代のアプリ配布
My first tvOS
3D touch for iOS
Contents blocker on iOS9
Embedded framework and so on
はじめてのWKInterfaceController
App extension for iOS
サーバーからiOSアプリを変更する
Xcode bot
AVSpeechSynthesizerとロケール

Can we live in a pure Swift world?

  • 1. Can we live in a pure Swi. world? @TachibanaKaoru 2016/2/17 @TachibanaKaoru, 2015 1
  • 3. VOYAGE GROUP • appe%というグルメアプリや、朝時 間.jpという朝時間活用アプリなどをだ してます。 • iOS/Android Engineer絶賛募集中です。 • h5p://voyagegroup.com/crew/ recruit/career/android/ • Kotlinで開発してます @TachibanaKaoru, 2015 3
  • 4. try! Swi) • 2016/3/2~3/4 at Shibuya • h3p://tryswi9conf.com/ • VOYAGE GROUP はtry Swi9のスポンサーです。 @TachibanaKaoru, 2015 4
  • 5. iOS Developers Conference 2016 • h#ps://iosdc.jp • iOSおよび周辺技術を題材とした日本国内初の Developer Conference です。 • 2016/08/20 • スポンサーを募集しています @TachibanaKaoru, 2015 5
  • 6. Are you wri*ng Swi. code? @TachibanaKaoru, 2015 6
  • 8. Are you wri*ng Objec*ve-C code? @TachibanaKaoru, 2015 8
  • 10. So, can we live in a pure Swi0 world? @TachibanaKaoru, 2015 10
  • 11. Unusable Swi- features in ObjC (1) • Generics • Tuples • Enumera0ons defined in Swi7 without Int raw value type • Structures defined in Swi7 • Top-level func0ons defined in Swi7 • Global Variables defined in Swi7 @TachibanaKaoru, 2015 11
  • 12. Unusable Swi- features in ObjC (2) • Typealiases defined in Swi0 • Swi0-style variadics • Nested types • Curried func:ons • Protocol Extension (new from Swi02.0) @TachibanaKaoru, 2015 12
  • 13. These are not only unusable from ObjC • これらの Swi&独自機能は「Objec,ve-Cからよべない」だけで はない • 実は、pure Swi& の project でもこの制限がかかる @TachibanaKaoru, 2015 13
  • 14. We cannot use them as a selector • Objec've-Cでよべないものはselectorで指定することができな い • performselector 指定することもできない。 • Add-Target 指定することもできない。 @TachibanaKaoru, 2015 14
  • 15. Ex: Tuples as Selector • compile OK, unrecognized selector let mybutton = UIButton(type: UIButtonType.Custom) mybutton.addTarget(self, action: "currentStatus:", forControlEvents: UIControlEvents.TouchUpInside) func presonInformation(sender:AnyObject) -> (name:String,age:Int) { return ("Ranko Kanzaki",14) } @TachibanaKaoru, 2015 15
  • 16. Ex: String Enum as Selector • compile OK, unrecognized selector let mybutton = UIButton(type: UIButtonType.Custom) mybutton.addTarget(self, action: "currentStatus:", forControlEvents: UIControlEvents.TouchUpInside) enum GameStatus { case Start case End } func currentStatus(sender:AnyObject) -> GameStatus{ return GameStatus.Start } @TachibanaKaoru, 2015 16
  • 17. Ex: Protocol Extension as Selector • compile OK, unrecognized selector let mybutton = UIButton(type: UIButtonType.Custom) mybutton.addTarget(self, action: "currentStatus:", forControlEvents: UIControlEvents.TouchUpInside) protocol DebugLog { func writeDebugMessage() -> Void } extension DebugLog { func writeDebugMessage() -> Void{ print("Protocol extensionで共通化されたデバッグ出力です。") } } @TachibanaKaoru, 2015 17
  • 18. Same for @nonobjc • @nonobjc は、Objec+ve-Cと互換性のあるSwi2 featureにつけ るとObjec+ve-Cから使えなくなる指定子(@objcの逆) • compile OK, unrecognized selector let mybutton = UIButton(type: UIButtonType.Custom) mybutton.addTarget(self, action: "currentHP:", forControlEvents: UIControlEvents.TouchUpInside) @nonobjc func currentHP(sender:AnyObject) -> Int{ return 0 } @TachibanaKaoru, 2015 18
  • 19. We cannot use Swi.-only features as a selector • 「Objec've-Cからよべないもの」は、selectorに指定できない @TachibanaKaoru, 2015 19
  • 20. What "usable from ObjC" means? • 「Objec've-Cからよべる」とは? • Swi. Compile 時に作成される Objec've-C member table に 入っているかどうか @TachibanaKaoru, 2015 20
  • 21. Objec&ve-C member table • h#ps://github.com/apple/swi5/blob/master/lib/AST/ NameLookup.cpp void ClassDecl::createObjCMethodLookup() { assert(!ObjCMethodLookup && "Already have an Objective-C member table"); auto &ctx = getASTContext(); ObjCMethodLookup = new (ctx) ObjCMethodLookupTable(); // Register a cleanup with the ASTContext to call the lookup table // destructor. ctx.addCleanup([this]() { this->ObjCMethodLookup->destroy(); }); } @TachibanaKaoru, 2015 21
  • 22. Is this method "usable from ObjC" ? • 実装時に、特定のメソッドが Objec've-Cから使えるのかどうか確認 するのであれば、MyProject-Swi4.hで 確認しましょう • ビルド時に中間生成物として作成さ れています • Xcodeでは右の方法で見ることがで きます @TachibanaKaoru, 2015 22
  • 23. In "MyProject-Swi2.h" • ObjC signature • Protocol Extensionのsignatureはadoptしているclassではない SWIFT_PROTOCOL("_TtP6Forest8DebugLog_") @protocol DebugLog - (void)writeDebugMessage; @end SWIFT_CLASS("_TtC6Forest17ElmViewController") @interface ElmViewController : UIViewController <UINavigationControllerDelegate> - (void)viewWillAppear:(BOOL)animated; - (void)viewDidDisappear:(BOOL)animated; - (void)showTestMessage:(NSString * __nullable)message; - (nonnull instancetype)initWithNibName:(NSString * __nullable)nibNameOrNil bundle:(NSBundle * __nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER; - (nullable instancetype)initWithCoder:(NSCoder * __nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER; @end @TachibanaKaoru, 2015 23
  • 24. Recap • S#ll, we cannot live in a pure Swi3 world... • Pure Swi3 UI Framework が欲しい。 @TachibanaKaoru, 2015 24