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
庸介 高橋
PPTX, PDF
1,593 views
Swift3とObjective-Cのブリッジでハマったこと
集まれSwift好き!Swift愛好会 Vol12の内容です。
Engineering
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 16
2
/ 16
3
/ 16
4
/ 16
5
/ 16
6
/ 16
7
/ 16
8
/ 16
9
/ 16
10
/ 16
11
/ 16
12
/ 16
13
/ 16
14
/ 16
15
/ 16
16
/ 16
More Related Content
PDF
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
by
佐藤 俊太郎
PDF
Swift 3.0 の新しい機能(のうちの9つ)
by
Tomohiro Kumagai
PDF
成長する組織を支えるシロクの自動化
by
Naoyuki Kataoka
PDF
How to handle bitcode
by
Syo Ikeda
PDF
シロク流事業の立ち上げ方の成功と失敗
by
Naoyuki Kataoka
PDF
Androidとi beacon(ble)
by
Ikunori Yamaguchi
PPT
Xp祭り2014 agile2014参加報告(パターンネットワーク分析を含む)
by
Hironori Washizaki
PDF
はじめてのiOSアプリ開発 ①
by
Nagamine Hiromasa
yidev 第18回勉強会 「業務でSwiftで3ヶ月開発してきたので一旦振り返り」
by
佐藤 俊太郎
Swift 3.0 の新しい機能(のうちの9つ)
by
Tomohiro Kumagai
成長する組織を支えるシロクの自動化
by
Naoyuki Kataoka
How to handle bitcode
by
Syo Ikeda
シロク流事業の立ち上げ方の成功と失敗
by
Naoyuki Kataoka
Androidとi beacon(ble)
by
Ikunori Yamaguchi
Xp祭り2014 agile2014参加報告(パターンネットワーク分析を含む)
by
Hironori Washizaki
はじめてのiOSアプリ開発 ①
by
Nagamine Hiromasa
Viewers also liked
PPTX
AKIBA.swift vol.1
by
cocominap
PDF
モダンな開発現場になるためのお作法としてのツール活用
by
智治 長沢
PDF
プロトコル指向に想う世界観 #__swift__
by
Tomohiro Kumagai
PDF
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
by
Tomohiro Kumagai
PPTX
クラウド利用も可能になって身近になった超高速リアルタイムEAI「Magic xpi」
by
Tsuyoshi Watanabe
PPTX
多人数iOSアプリ開発を考える
by
sasaron 397
PDF
iOS開発を楽しむ最初の一歩!デリゲートをなるべく分かりやすく!
by
Kanako Kobayashi
PDF
ナレッジを共有する文化をつくるために
by
Recruit Lifestyle Co., Ltd.
PDF
チケット駆動で加速する顧客と協業するプロジェクトマネジメント
by
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
PDF
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
by
keroyonn
PPTX
Swiftにおけるclassとstructの使い分けをDDDから考える
by
Takuya Kitamura
PDF
Swift で JavaScript 始めませんか? #iOSDC
by
Tomohiro Kumagai
PDF
NS Prefix - そこから見渡す Swift 3 の景色 #startup_mobile
by
Tomohiro Kumagai
PPTX
Androidアプリケーション開発入門
by
OESF Education
PDF
コンピュータビジョンの最新ソフトウェア開発環境 SSII2015 チュートリアル hayashi
by
Masaki Hayashi
PDF
Carthageについて知りたいn個のこと
by
Syo Ikeda
PDF
Android概要資料
by
サイバーエージェント
PDF
Sketchで変わるワークフロー
by
Asami Yamamoto
AKIBA.swift vol.1
by
cocominap
モダンな開発現場になるためのお作法としてのツール活用
by
智治 長沢
プロトコル指向に想う世界観 #__swift__
by
Tomohiro Kumagai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
by
Tomohiro Kumagai
クラウド利用も可能になって身近になった超高速リアルタイムEAI「Magic xpi」
by
Tsuyoshi Watanabe
多人数iOSアプリ開発を考える
by
sasaron 397
iOS開発を楽しむ最初の一歩!デリゲートをなるべく分かりやすく!
by
Kanako Kobayashi
ナレッジを共有する文化をつくるために
by
Recruit Lifestyle Co., Ltd.
チケット駆動で加速する顧客と協業するプロジェクトマネジメント
by
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
YAPC::Hokkaido 2016 「普段使い言語環境」更新によるスキルリセットサバイバルガイド
by
keroyonn
Swiftにおけるclassとstructの使い分けをDDDから考える
by
Takuya Kitamura
Swift で JavaScript 始めませんか? #iOSDC
by
Tomohiro Kumagai
NS Prefix - そこから見渡す Swift 3 の景色 #startup_mobile
by
Tomohiro Kumagai
Androidアプリケーション開発入門
by
OESF Education
コンピュータビジョンの最新ソフトウェア開発環境 SSII2015 チュートリアル hayashi
by
Masaki Hayashi
Carthageについて知りたいn個のこと
by
Syo Ikeda
Android概要資料
by
サイバーエージェント
Sketchで変わるワークフロー
by
Asami Yamamoto
More from 庸介 高橋
PPTX
Cookpad TechConf 2019 - Build Chat with Firestore
by
庸介 高橋
PPTX
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
by
庸介 高橋
PPTX
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
by
庸介 高橋
PPTX
LIFULL HOME'S Firebaseによる特集配信
by
庸介 高橋
PPTX
tvOS開発前に確認すべきこと
by
庸介 高橋
PPTX
Jenkins + Deploygateを使った簡単ベータ配信
by
庸介 高橋
PPTX
家族の「ただいま」を教えてくれるキーホルダー NFC版
by
庸介 高橋
PPTX
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
by
庸介 高橋
PDF
OSSから学ぶSwift実践テクニック
by
庸介 高橋
PDF
カラオケ曲管理アプリを作りました
by
庸介 高橋
Cookpad TechConf 2019 - Build Chat with Firestore
by
庸介 高橋
最新技術に挑戦し続ける LIFULL HOME'Sアプリの開発について
by
庸介 高橋
【ヒカラボ 2018/02/01】iOS LIFULL HOME'Sアプリリニューアルの裏側
by
庸介 高橋
LIFULL HOME'S Firebaseによる特集配信
by
庸介 高橋
tvOS開発前に確認すべきこと
by
庸介 高橋
Jenkins + Deploygateを使った簡単ベータ配信
by
庸介 高橋
家族の「ただいま」を教えてくれるキーホルダー NFC版
by
庸介 高橋
おうちハック発表会 #5 家族の「ただいま」を教えてくれるキーホルダー
by
庸介 高橋
OSSから学ぶSwift実践テクニック
by
庸介 高橋
カラオケ曲管理アプリを作りました
by
庸介 高橋
Swift3とObjective-Cのブリッジでハマったこと
1.
Swift3とObjective-Cのブ リッジでハマったこと @yousan 集まれSwift好き!Swift愛好会 Vol12
2.
自己紹介 • @yousan • iOSアプリエンジニア •
趣味 テニス
3.
Swift3移行中 Objective-Cでクラッシュ
4.
let person =
Person(nickname: "yousan") let uppercaseNickname = ObjCUtils.convert(toUppercase: person.nickname) print(uppercaseNickname) @implementation ObjCUtils + (nonnull id)convertToUppercase:(nonnull id)string { return [string uppercaseString]; } @end Swift Objective-C
5.
Terminating app due
to uncaught exception 'NSInvalidArgumentException
6.
let person =
Person(nickname: "yousan") let uppercaseNickname = ObjCUtils.convert(toUppercase: person.nickname) print(uppercaseNickname) @implementation ObjCUtils + (nonnull id)convertToUppercase:(nonnull id)string { return [string uppercaseString]; } @end Swift Objective-C struct Person { let nickname: String? } オプショナルでした Swift2のときはAnyObjectだったので コンパイル時にエラーになっていた
7.
id → Anyの注意 +
(nonnull id)convertToUppercase:(nonnull id)string; class func convert(toUppercase string: Any) -> Any class func convertToUppercase(string: AnyObject) -> AnyObject Swift2 Swift3 オプショナルは引数に渡せない オプショナルも引数に渡せる Objective-C nonnullでもコンパイルエラーにならない
8.
idである必要がなければ型を指定 + (nonnull NSString
*)convertToUppercase:(nonnull NSString *)string; class func convert(toUppercase string: String) -> String Objective-C Swift3 NSArray, NSDictionary, NSSetはジェネリクスを指定 + (nonnull NSArray<NSString *>)convertToUppercase:(nonnull NSArray<NSString *>)strings; class func convert(toUppercase strings: [String]) -> [String] Objective-C Swift3 外部ライブラリは気をつけるしかない
9.
なぜこんな改変を?
10.
• SE-0116 https://github.com/apple/swift-evolution/blob/master/proposals/0116-id-as-any.md • Objective-C
id as Swift Any - Swift Blog https://developer.apple.com/swift/blog/?id=39 • 5分でわかるSE-0116(id-as-any) // Speaker Deck https://speakerdeck.com/takasek/5fen-dewakaruse-0116-id-as-any
11.
Swift2 // StringがAnyObjectに暗黙的に変換されている let converted
= ObjCUtils.convertToUppercase("yousan") 書きやすいように暗黙的にAnyObjectに変換している 本来関係のない型に、しかも暗黙的に変換されるのは 色々な問題を生むのではないか?
12.
Swift3 let name: AnyObject
= "yousan" as AnyObject // AnyObjectへの変換を明示 let converted = ObjCUtils.convert(toUppercase: name) let uppercaseNickname: String = converted as! String print(uppercaseNickname) 該当する場所全てにこれを書くのは大変 SE-0072 Fully eliminate implicit bridging conversions from Swift
13.
AnyObjectをAnyにすれば • AnyObjectへの暗黙変換は発生しない • AnyObjectへの変換処理も書く必要がない •
全てのSwiftの型をObjective-Cに渡せる ※ 渡した結果どうなるかはコンパイラに任せる 将来的には全てのSwiftの型をブリッジしたい
14.
Objective-Cに対応する型がな い場合どうなるか • _SwiftValueというクラスとして受け取る • 今後もObjective-Cに対応づけられるSwiftの型は 増えていくので、この型に依存するべきではな い
15.
例えば https://github.com/apple/swift-evolution/blob/master/proposals/0139-bridge-nsnumber-a • Int16 →
_SwiftValue • CGRect → _SwiftValue Swift 3.0.1 • Int16 → NSNumber • CGRect → NSValue Swift 3.0
16.
まとめ • Objective-Cでidに値を渡すときはオプショナル に注意 • Objective-Cに渡せるSwiftの型は今後も増えてい くと思われます
Download