質問: 現在Swiftでコーディングをしています。 その中でプロジェクトの内に「xxx-Bridiging-Header.h」ファイルを作成し、 外部のObjective-cで記載された「xxx.h」等を呼び出しています。 ヘッダファイルに定義されている関数の中で、 「xxxwithx」のような名称のものがあるのですが、 Swiftから該当関数を呼び出そうと記述すると、 自動補完機能ではa.xxx(withx: xxx)などと記載されてしまいます。 (手動で「xxxwithx(A)」に修正すると、コンパイルエラーになります。) 【質問】 1.objective-c(もしくはswift)の関数名で「with」というのは、 何か特殊なキーワードかなにかなのでしょうか? 2.上記のように変換されるのは、正しいのでしょうか。 (とりあえず動かしてみたものの、NULLエラーになってしまいました。 3.上記の「xxx.h」ファイルなのですが、 関数名の一覧が記載されているだけで処理内容がありません。 ためしに呼び出してみると該当ファイルのコメントに記載されている通り、 「Yes」「No」の結果が返ってくるケースがあるのですが、 一体どこに記載された処理が行われているのでしょうか。 【呼出関数】 ``` - (BOOL)aWithb:(NSData *)masterKey; ``` 【Xcodeの補完機能で表示される】 ``` a.a(withB: Data!) ``` 【想定】 ``` a.aWithb(Data) ```
回答: こんにちは、わかるところだけ。 > > 1.objective-c(もしくはswift)の関数名で「with」というのは、 > > 何か特殊なキーワードかなにかなのでしょうか? > > > 具体的な公式資料はちょっと見つけられませんでしたのでいい加減な回答になってしまいますが、 SwiftからObjCのメソッドを呼び出す場合には、Swiftらしい関数名に勝手に変わります。 「withなんたら」は昔からObjCで第一引数の内容を表すために関数名の最後に付与されていました。 そのため、特殊なキーワードと捉えてもらって問題ありません。 > > 2.上記のように変換されるのは、正しいのでしょうか。 > > (とりあえず動かしてみたものの、NULLエラーになってしまいました。 > > > コンパイルが通っているということは、関数名の呼び出しは正しいということです。 NULLエラーは別の問題でしょう。 (Dataがnilだとか) > > 3.上記の「xxx.h」ファイルなのですが、 > > 関数名の一覧が記載されているだけで処理内容がありません。 > > ためしに呼び出してみると該当ファイルのコメントに記載されている通り、 > > 「Yes」「No」の結果が返ってくるケースがあるのですが、 > > 一体どこに記載された処理が行われているのでしょうか。 > > > たぶん物によって違うと思います。 ObjCのソースを直接コンパイルしているのであれば、クラスや関数の定義は.hファイル、実装は.mmファイルに在ります。 Frameworkなどの場合は実装は見えなかった気がします。