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

What's hot

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

What's hot (20)

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

Viewers also liked

5分でわかるText Kit
5分でわかるText Kit5分でわかるText Kit
5分でわかるText KitRyota Hayashi
 
脱swift初心者するための2つのきっかけ
脱swift初心者するための2つのきっかけ脱swift初心者するための2つのきっかけ
脱swift初心者するための2つのきっかけDaiki Mogmet Ito
 
iOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いiOS の通信における認証の種類とその取り扱い
iOS の通信における認証の種類とその取り扱いniwatako
 
PUSH通知の許可をよりもらうためのUI考察など
PUSH通知の許可をよりもらうためのUI考察などPUSH通知の許可をよりもらうためのUI考察など
PUSH通知の許可をよりもらうためのUI考察などTsuyoshi Yonemoto
 
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話
自分でできることを増やしてみるというのは結構楽しかったという新米iOS開発者の小話Reiko Gotou
 
watchOS1 to watchOS2
watchOS1 to watchOS2watchOS1 to watchOS2
watchOS1 to watchOS2Motoki Narita
 
とにかく明るいCore Spotlight
とにかく明るいCore Spotlightとにかく明るいCore Spotlight
とにかく明るいCore Spotlight今城 善矩
 
Command Line Tool in swift
Command Line Tool in swiftCommand Line Tool in swift
Command Line Tool in swiftYusuke Kita
 
チュートリアルをリッチにしよう
チュートリアルをリッチにしようチュートリアルをリッチにしよう
チュートリアルをリッチにしようshinya sakemoto
 
【Potatotips #26】Replace EventBus with RxJava/RxAndroid
【Potatotips #26】Replace EventBus with RxJava/RxAndroid【Potatotips #26】Replace EventBus with RxJava/RxAndroid
【Potatotips #26】Replace EventBus with RxJava/RxAndroidHiroyuki Kusu
 
教育の生産性へそれに辿りつかない物語
教育の生産性へそれに辿りつかない物語教育の生産性へそれに辿りつかない物語
教育の生産性へそれに辿りつかない物語heibei_marunouchi
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック庸介 高橋
 
最近遊んだ Wii Uの 3つのソフトの感想
最近遊んだ Wii Uの 3つのソフトの感想最近遊んだ Wii Uの 3つのソフトの感想
最近遊んだ Wii Uの 3つのソフトの感想teapipin
 
これからの時代に! パソコン離れの中のパソコン選び
これからの時代に! パソコン離れの中のパソコン選びこれからの時代に! パソコン離れの中のパソコン選び
これからの時代に! パソコン離れの中のパソコン選びteapipin
 
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hackツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hackteapipin
 
Prottとsketchとzeplinのススメ
ProttとsketchとzeplinのススメProttとsketchとzeplinのススメ
ProttとsketchとzeplinのススメAsami Yamamoto
 

Viewers also liked (18)

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

Similar to Can we live in a pure Swift world?

Swift Protocol and Selector
Swift Protocol and SelectorSwift Protocol and Selector
Swift Protocol and Selectortoyship
 
What's new Swift3
What's new Swift3What's new Swift3
What's new Swift3toyship
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する幸雄 村上
 
これからのモバイルWebと最新動向
これからのモバイルWebと最新動向これからのモバイルWebと最新動向
これからのモバイルWebと最新動向yoshikawa_t
 
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うGAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うTakuya Ueda
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側Tomoki Hasegawa
 
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringVisual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringIssei Hiraoka
 
How to django at first
How to django at firstHow to django at first
How to django at firstMaito Kuwahara
 
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Hironori Sekine
 
第2.1回Twitter API勉強会 - 検索API
第2.1回Twitter API勉強会 - 検索API第2.1回Twitter API勉強会 - 検索API
第2.1回Twitter API勉強会 - 検索APIYusuke Yamamoto
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~Hideki Takase
 
【第1回開催!】Kong Community, Japanミートアップ
【第1回開催!】Kong Community, Japanミートアップ 【第1回開催!】Kong Community, Japanミートアップ
【第1回開催!】Kong Community, Japanミートアップ Junji Nishihara
 
Titanium MobileでOAuth
Titanium MobileでOAuthTitanium MobileでOAuth
Titanium MobileでOAuthKosuke Isobe
 
20151213 tokushimaapp
20151213 tokushimaapp20151213 tokushimaapp
20151213 tokushimaapp健一 辰濱
 
KanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたしKanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたしMaehana Tsuyoshi
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭りTomoki Hasegawa
 
Fukuoka Ruby Award 2012
Fukuoka Ruby Award 2012Fukuoka Ruby Award 2012
Fukuoka Ruby Award 2012ThinReports
 

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

Swift Protocol and Selector
Swift Protocol and SelectorSwift Protocol and Selector
Swift Protocol and Selector
 
What's new Swift3
What's new Swift3What's new Swift3
What's new Swift3
 
SwiftのOptionalを理解する
SwiftのOptionalを理解するSwiftのOptionalを理解する
SwiftのOptionalを理解する
 
これからのモバイルWebと最新動向
これからのモバイルWebと最新動向これからのモバイルWebと最新動向
これからのモバイルWebと最新動向
 
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使うGAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
 
勉強会のこちら側とあちら側
勉強会のこちら側とあちら側勉強会のこちら側とあちら側
勉強会のこちら側とあちら側
 
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringVisual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
 
How to django at first
How to django at firstHow to django at first
How to django at first
 
Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門Pythonによる非同期プログラミング入門
Pythonによる非同期プログラミング入門
 
Klabの梅雨対策
Klabの梅雨対策Klabの梅雨対策
Klabの梅雨対策
 
第2.1回Twitter API勉強会 - 検索API
第2.1回Twitter API勉強会 - 検索API第2.1回Twitter API勉強会 - 検索API
第2.1回Twitter API勉強会 - 検索API
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
 
【第1回開催!】Kong Community, Japanミートアップ
【第1回開催!】Kong Community, Japanミートアップ 【第1回開催!】Kong Community, Japanミートアップ
【第1回開催!】Kong Community, Japanミートアップ
 
Swift勉強会
Swift勉強会Swift勉強会
Swift勉強会
 
Titanium MobileでOAuth
Titanium MobileでOAuthTitanium MobileでOAuth
Titanium MobileでOAuth
 
20151213 tokushimaapp
20151213 tokushimaapp20151213 tokushimaapp
20151213 tokushimaapp
 
KanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたしKanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたし
 
OpenCV on mobile
OpenCV on mobileOpenCV on mobile
OpenCV on mobile
 
エンジニアのお祭り
エンジニアのお祭りエンジニアのお祭り
エンジニアのお祭り
 
Fukuoka Ruby Award 2012
Fukuoka Ruby Award 2012Fukuoka Ruby Award 2012
Fukuoka Ruby Award 2012
 

More from toyship

Time for Xcode Behavior
Time for Xcode BehaviorTime for Xcode Behavior
Time for Xcode Behaviortoyship
 
Notifications in iOS10
Notifications in iOS10Notifications in iOS10
Notifications in iOS10toyship
 
Universal Link
Universal LinkUniversal Link
Universal Linktoyship
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布toyship
 
My first tvOS
My first tvOSMy first tvOS
My first tvOStoyship
 
3D touch for iOS
3D touch for iOS3D touch for iOS
3D touch for iOStoyship
 
Contents blocker on iOS9
Contents blocker on iOS9Contents blocker on iOS9
Contents blocker on iOS9toyship
 
Embedded framework and so on
Embedded framework and so onEmbedded framework and so on
Embedded framework and so ontoyship
 
はじめてのWKInterfaceController
はじめてのWKInterfaceControllerはじめてのWKInterfaceController
はじめてのWKInterfaceControllertoyship
 
App extension for iOS
App extension for iOSApp extension for iOS
App extension for iOStoyship
 
サーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するサーバーからiOSアプリを変更する
サーバーからiOSアプリを変更するtoyship
 
Xcode bot
Xcode botXcode bot
Xcode bottoyship
 
AVSpeechSynthesizerとロケール
AVSpeechSynthesizerとロケールAVSpeechSynthesizerとロケール
AVSpeechSynthesizerとロケールtoyship
 

More from toyship (13)

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

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Recently uploaded (9)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

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