SlideShare une entreprise Scribd logo
1  sur  11
Télécharger pour lire hors ligne
Mix and Match
Swift and Objective-C
Goichi Hirakawa
自己紹介
• 平川 剛一 (Goichi Hirakawa)
• @gooichi
• OS X / iOSソフトウェアエンジニア(フリー)
• GyazSquare / GitHub
• Mailer、デバイス制御などお固いアプリをメイン
• Objective-C歴1X年
• NextStep時代から…
SwiftとObjCの組み合わせ
• 同一プロジェクトで共存可
• 考慮すべきこと:
• 相互クラス参照
• ObjCからSwiftの利用
• Swift名オーバーライド
• Swiftで利用不可
• ObjC宣言の洗練
• モジュールの命名
クラス参照(アプリ)
• Objective-CをSwiftへインポート
• Xcodeが XXX-Bridging-Header.h を自動的に作成
• Swiftから参照するクラスのヘッダを記述
#import "XYZCustomCell.h"
• SwiftをObjective-Cへインポート
• Xcodeが XXX-Swift.h を自動的に作成
• Swiftを利用するObjCソースでimport
#import "ProductModuleName-Swift.h"
クラス参照(フレームワーク)
• Objective-CをSwiftへインポート
• Build Settingsの Defines Module 設定を YES
• UmbrellaヘッダにSwiftに公開するObjCヘッダを記述
#import <XYZ/XYZCustomCell.h>
• SwiftをObjective-Cへインポート
• Build Settingsの Defines Module 設定を YES
• Swiftクラスを利用するObjCソースでimport
#import <ProductName/ProductName-Swift.h>
ObjCからSwiftの利用
• SwiftコードをインポートするとObjC構文で利用可能
• @objc属性が必要
• ObjCクラス継承の場合、自動的に付加
• ObjC非互換の機能は利用不可
• ジェネリクス、タプル、Int Raw値でない列挙型、Swiftで定義さ
れた構造体/トップレベル関数/グローバル変数/型エイリアス、
Swiftスタイルの可変長引数、ネスト型、カリー関数
• ObjCでのSwiftクラスのサブクラス化は不可
Swift名オーバーライド
• ObjCのメソッド名、列挙型のケース、オプション設定値を変更可能
• NS_SWIFT_NAME(_name)マクロ
+ (instancetype)recordWithRPM:(NSUInteger)RPM
NS_SWIFT_NAME(init(RPM:));
+ (id)recordWithQuality:(double)quality
NS_SWIFT_NAME(record(quality:));
typedef NS_ENUM(NSInteger, ABCRecordSide) {
ABCRecordSideA,
ABCRecordSideB NS_SWIFT_NAME("FlipSide"),
};
Swiftで利用不可
• Swiftでは適切でない/不要なObjCの宣言をインポー
トさせない
• NS_SWIFT_UNAVAILABLE(_msg)マクロ
+ (instancetype)collectionWithValues:(NSArray *)values
forKeys:(NSArray<NSCopying> *)keys
NS_SWIFT_UNAVAILABLE("Use a dictionary literal instead");
ObjC宣言の洗練
• 元の実装を有効にしたまま、洗練されたSwiftのインターフェイスを拡張で提供
• NS_REFINED_FOR_SWIFTマクロ
• ObjCのインターフェイス
@interface Color : NSObject
- (void)getRed:(nullable CGFloat *)red
green:(nullable CGFloat *)green
blue:(nullable CGFloat *)blue
alpha:(nullable CGFloat *)alpha NS_REFINED_FOR_SWIFT;
@end
• Swiftの拡張インターフェイス
extension Color {
var RGBA: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
var r: CGFloat = 0.0
var g: CGFloat = 0.0
var b: CGFloat = 0.0
var a: CGFloat = 0.0
__getRed(&r, green: &g, blue: &b, alpha: &a)
return (red: r, green: g, blue: b, alpha: a)
}
}
モジュールの命名
• 製品モジュール名からXcodeはヘッダ接頭辞を命名
• XXX-Bridging-Header.h 、 XXX-Swift.h
• デフォルトで製品モジュール名は製品名と同じ
• アルファベット、数字以外はアンダースコア(_)
まとめ
• SwiftとObjective-Cの組み合わせについて
• 詳細については、Using Swift with Cocoa and Objective-C (Swift 2.1)の
Mix and Matchを参照
• 追記:NS_SWIFT_NOTHROWマクロ
• スローさせずにNSErrorを生成するための宣言
• 詳細はAdopting Cocoa Design Patternsを参照
- (BOOL)checkResourceIsReachableAndReturnError:
(NSError **)error NS_SWIFT_NOTHROW
NS_AVAILABLE(10_6, 4_0);

Contenu connexe

Tendances

New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0Goichi Hirakawa
 
開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能Masaki Suzuki
 
AngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSとAngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSとRyo Iinuma
 
Node.js version16の新機能
Node.js version16の新機能Node.js version16の新機能
Node.js version16の新機能Masaki Suzuki
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶShumpei Shiraishi
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布toyship
 
React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話GIG inc.
 
TravisCIでActionScriptを動かす
TravisCIでActionScriptを動かすTravisCIでActionScriptを動かす
TravisCIでActionScriptを動かすgyoh_k
 
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門Shumpei Shiraishi
 
TypeScript による今風の web アプリ開発
TypeScript による今風の web アプリ開発TypeScript による今風の web アプリ開発
TypeScript による今風の web アプリ開発靖 陣内
 
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについてPHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについてssusered4a9d
 
チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版Ikada Kaori
 
既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話akatsuki174
 
LT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかLT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかKazuya Matsubara
 

Tendances (20)

New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0New Objective-C Features for Swift 2.0
New Objective-C Features for Swift 2.0
 
開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能開発チーム管理で役立ったVSCode拡張機能
開発チーム管理で役立ったVSCode拡張機能
 
AngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSとAngularJSとFluxとRiotJSと
AngularJSとFluxとRiotJSと
 
watchOS2 tips
watchOS2 tipswatchOS2 tips
watchOS2 tips
 
iOS豆知識ver0.0.5
iOS豆知識ver0.0.5iOS豆知識ver0.0.5
iOS豆知識ver0.0.5
 
Swift入門
Swift入門Swift入門
Swift入門
 
Node.js version16の新機能
Node.js version16の新機能Node.js version16の新機能
Node.js version16の新機能
 
Riot.jsに触れてみた話
Riot.jsに触れてみた話Riot.jsに触れてみた話
Riot.jsに触れてみた話
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
 
Xcode7時代のアプリ配布
Xcode7時代のアプリ配布Xcode7時代のアプリ配布
Xcode7時代のアプリ配布
 
20140629 firefoxos-devenv
20140629 firefoxos-devenv20140629 firefoxos-devenv
20140629 firefoxos-devenv
 
React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話
 
TravisCIでActionScriptを動かす
TravisCIでActionScriptを動かすTravisCIでActionScriptを動かす
TravisCIでActionScriptを動かす
 
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
 
TypeScript による今風の web アプリ開発
TypeScript による今風の web アプリ開発TypeScript による今風の web アプリ開発
TypeScript による今風の web アプリ開発
 
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについてPHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
PHP5→PHP7にバージョンアップをするに あたって実感した Docker 導入の素晴らしさについて
 
Swift勉強会
Swift勉強会Swift勉強会
Swift勉強会
 
チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版チーム開発にSwiftLintを導入してみた・詳細版
チーム開発にSwiftLintを導入してみた・詳細版
 
既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話既存プロジェクトにSwiftLintを導入した話
既存プロジェクトにSwiftLintを導入した話
 
LT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとかLT駆動開発04 5分では分からないTypeScriptのなんとか
LT駆動開発04 5分では分からないTypeScriptのなんとか
 

Similaire à Mix and Match / Swift and Objective-C

Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Tomoki Hasegawa
 
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」Kazumi IWANAGA
 
Swiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲームSwiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲーム聡 中川
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会codeal
 
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSYoichiro Sakurai
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発日本マイクロソフト株式会社
 
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationMicrosoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationYuichiro Saito
 
Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化Akihiro Matsuura
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ寛 吉田
 
Macアプリのインストーラ作成ツールSwift版
Macアプリのインストーラ作成ツールSwift版Macアプリのインストーラ作成ツールSwift版
Macアプリのインストーラ作成ツールSwift版Akira Hayashi
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようdcubeio
 
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込むKazumi IWANAGA
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...Akira Inoue
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ聡 中川
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能Shingo Sato
 
iOS開発でのおすすめライブラリと管理
iOS開発でのおすすめライブラリと管理iOS開発でのおすすめライブラリと管理
iOS開発でのおすすめライブラリと管理Tomoya Hayakawa
 
はじめてのiOSアプリ開発 ①
はじめてのiOSアプリ開発 ①はじめてのiOSアプリ開発 ①
はじめてのiOSアプリ開発 ①Nagamine Hiromasa
 

Similaire à Mix and Match / Swift and Objective-C (20)

Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
 
Swiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲームSwiftアプリ制作入門 かんたんシューティングゲーム
Swiftアプリ制作入門 かんたんシューティングゲーム
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
 
XcodeのTargetについてのTIPS
XcodeのTargetについてのTIPSXcodeのTargetについてのTIPS
XcodeのTargetについてのTIPS
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 PresentationMicrosoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
 
Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化Cocos2d-x ver.3 開発の効率化
Cocos2d-x ver.3 開発の効率化
 
Inside of swift
Inside of swiftInside of swift
Inside of swift
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ
 
Macアプリのインストーラ作成ツールSwift版
Macアプリのインストーラ作成ツールSwift版Macアプリのインストーラ作成ツールSwift版
Macアプリのインストーラ作成ツールSwift版
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみよう
 
SCM, CI and Maven Repo
SCM, CI and Maven RepoSCM, CI and Maven Repo
SCM, CI and Maven Repo
 
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
日々の開発フローにプラスする GitHub Actions ~ セキュリティ対策を取り込む
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 
Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
 
iOS開発でのおすすめライブラリと管理
iOS開発でのおすすめライブラリと管理iOS開発でのおすすめライブラリと管理
iOS開発でのおすすめライブラリと管理
 
はじめてのiOSアプリ開発 ①
はじめてのiOSアプリ開発 ①はじめてのiOSアプリ開発 ①
はじめてのiOSアプリ開発 ①
 

Plus de Goichi Hirakawa

Strings and characters in swift
Strings and characters in swiftStrings and characters in swift
Strings and characters in swiftGoichi Hirakawa
 
Swift API Design Guidelines (dec 3, 2015)
Swift API Design Guidelines (dec 3, 2015)Swift API Design Guidelines (dec 3, 2015)
Swift API Design Guidelines (dec 3, 2015)Goichi Hirakawa
 
Strings and Characters in Swift
Strings and Characters in SwiftStrings and Characters in Swift
Strings and Characters in SwiftGoichi Hirakawa
 

Plus de Goichi Hirakawa (6)

Strings and characters in swift
Strings and characters in swiftStrings and characters in swift
Strings and characters in swift
 
WebKit Overview
WebKit OverviewWebKit Overview
WebKit Overview
 
Server-side Swift
Server-side SwiftServer-side Swift
Server-side Swift
 
Swift Type System
Swift Type SystemSwift Type System
Swift Type System
 
Swift API Design Guidelines (dec 3, 2015)
Swift API Design Guidelines (dec 3, 2015)Swift API Design Guidelines (dec 3, 2015)
Swift API Design Guidelines (dec 3, 2015)
 
Strings and Characters in Swift
Strings and Characters in SwiftStrings and Characters in Swift
Strings and Characters in Swift
 

Mix and Match / Swift and Objective-C