#author("2017-01-23T16:11:17+09:00","default:wikiwriter","wikiwriter")
#author("2017-09-27T14:37:51+09:00","default:wikiwriter","wikiwriter")
&tag(Swift/Tips);
*目次 [#bc981f66]
#contents
*関連ページ [#v9c63574]
-[[Swift]]

*参考情報 [#c9ced93f]



*C/Objective-Cを呼び出す(ブリッジングヘッダーを使用する) [#ea4e0a03]
-ブリッジングヘッダーを使用する。[[[Swift] プロジェクトに Bridging-Header.h ファイルを追加する: スタジオプリズム㐧3ブログ:http://s-prism3.seesaa.net/article/416187615.html]]
-Objective-cクラスを作成すると自動で作成してくれるし、プロジェクトのビルド設定へも自動で追加してくれるのでこれが楽。
-手動で作成し、プロジェクト設定へ追加しても良い。

**自動生成する方法 [#zb564c84]
-「File > New > File」でObjective-Cファイルを生成。適当にクラスを作成する。
-Bridging Headerファイルを作成するかどうか訪ねられるので、作成するを選ぶ。
-「プロジェクト名-Bridging-Header.h」が追加される(例: demo-Bridging-Header.h)。ここに使いたいC関数のヘッダーファイルをincludeする。

**手動生成する場合 [#ue3154c6]
-「プロジェクト名-Bridging-Header.h」を手動で追加する(例: demo-Bridging-Header.h)。
-プロジェクトのTARGETSの設定で、Objective-C Bridging Headerに作成したブリッジングヘッダーファイルを指定する。demoプロジェクトの場合、demo/Demo-Bridging-Header.hのような感じ。

**データ型の変換 [#ne6bb2f3]
-NSDateとDateの変換。[[Swift 3: Date vs NSDate? - Stack Overflow:http://stackoverflow.com/questions/39811352/swift-3-date-vs-nsdate]]
-date as NSDateのようにして相互変換できる。


*DEBUGマクロの使用 [#hc21fbdc]
-以下のようなマクロを使用したい。
-Build Settings > Swift Compiler - Custom FLags > Other Swift FlagsのDebug設定に"-D DEBUG"を追加する。
#pre{{
#if DEBUG
    print("debug")
#elseif DEBUG2
    print("debug2")
#else
    print("else")
#endif
}}

*printを使用する [#wa9449f4]
-printを使用すると改行コミでデバッグメッセージが表示される。
-以前存在したprintlnは廃止された。かわりに以下を使用する。
#pre{{
print("abc", terminator: "")
}}
-NSViewのサブクラスで使用する場合。
#pre{{
Swift.print("abc")
}}


*NSErrorをキャッチする [#yfd4d301]
-そのままではNSErrorを継承したObjective-Cの例外をキャッチできない。
-[[swift3 - Swift 3: How to catch error if NSCoder decodeX function decodes wrong value type? - Stack Overflow:http://stackoverflow.com/questions/39671519/swift-3-how-to-catch-error-if-nscoder-decodex-function-decodes-wrong-value-type]]を参考に、ObjC.hとObjC.mを追加し、ブリッジングヘッダーにObjC.hをincludeする。
そして以下のように呼び出す。
#pre{{
do {
    try ObjC.catchException {
        let age = aDecoder.decodeInteger(forKey: "firstName")
    }
} catch {
    print(error.localizedDescription)
}
}}





トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS