質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2560閲覧

SwiftからObjective-cで記載されている関数を呼び出す方法について

terar

総合スコア7

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/05/22 00:24

現在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」の結果が返ってくるケースがあるのですが、
一体どこに記載された処理が行われているのでしょうか。

【呼出関数】

objective

1- (BOOL)aWithb:(NSData *)masterKey;

【Xcodeの補完機能で表示される】

swift

1a.a(withB: Data!)

【想定】

swift

1a.aWithb(Data)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは、わかるところだけ。

1.objective-c(もしくはswift)の関数名で「with」というのは、

何か特殊なキーワードかなにかなのでしょうか?

具体的な公式資料はちょっと見つけられませんでしたのでいい加減な回答になってしまいますが、
SwiftからObjCのメソッドを呼び出す場合には、Swiftらしい関数名に勝手に変わります。

「withなんたら」は昔からObjCで第一引数の内容を表すために関数名の最後に付与されていました。
そのため、特殊なキーワードと捉えてもらって問題ありません。

2.上記のように変換されるのは、正しいのでしょうか。

(とりあえず動かしてみたものの、NULLエラーになってしまいました。

コンパイルが通っているということは、関数名の呼び出しは正しいということです。
NULLエラーは別の問題でしょう。
(Dataがnilだとか)

3.上記の「xxx.h」ファイルなのですが、

関数名の一覧が記載されているだけで処理内容がありません。
ためしに呼び出してみると該当ファイルのコメントに記載されている通り、
「Yes」「No」の結果が返ってくるケースがあるのですが、
一体どこに記載された処理が行われているのでしょうか。

たぶん物によって違うと思います。
ObjCのソースを直接コンパイルしているのであれば、クラスや関数の定義は.hファイル、実装は.mmファイルに在ります。
Frameworkなどの場合は実装は見えなかった気がします。

投稿2019/05/22 00:45

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問