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

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

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

2回答

1816閲覧

【ios】obj-c読んでswiftに置き換える場合のコツを知りたいです【swift】

kantanopapan

総合スコア51

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

2グッド

2クリップ

投稿2016/01/27 03:43

お世話になってます。
swiftでソース書いているのですが、参考ソースをあさっているとobj-c資産のものも結構あるのでswiftに書き直そうとすることが多いです。(すみません時間無くてobj-c、他c系は不勉強状態です)

そんな私はよくこんなとこで引っかかります

lang

1[self.nextResponder touchesBegan:touches withEvent:event];

これの変換の正解は

lang

1self.nextResponder.touchesBegan(touches, withEvent: event) 2// または self.nextResponder()?.touchesBegan(touches, withEvent: event) ですかね

私がよくやる間違いの例

lang

1self.nextResponder(touchesBegan: touches, withEvent: event)

上の例ならtouchesBeganってメソッドとしてよく見るので
これは引数じゃないよなーと気づいて自力で解決できたりもします。
今はswiftifyなどで変換かけて正解を得ることが多いです。

そもそも間違える原因は私がobj-cのtouchesBegan:touchesの部分が
withEvent:eventと同じ形なので引数にしか見えないからだと思うのです。

swiftifyが自動で変換できてるということは、
構文法則があり、自力でも学べば理解できるはずなので、
わかりやすいサイトやコツを教えてもらえませんでしょうか
よろしくお願いします。

Tak1wa, afroscript👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

コツと言えるかは分かりませんが、
以下のコードを例にあげると、
[self.nextResponder touchesBegan:touches withEvent:event];

nextResponderオブジェクト(クラス)が所有しているtouchesBeganメソッドを呼び出しています。
Objective-c は第一引数のパラメータ名は省略するのでtouchesが第一引数のパラメータであることはわかります。

そのため、よくやる間違いについては自クラスにnextResponderメソッドがあるかのように書いています。
逆に自クラスにあるメソッドを呼びたい場合にどのように書くのかが自然にかけるようになれば、
同じような間違いは減るのではないでしょうか。

誰もが通る道だと思いますので、ここはしっかり理解して進むことをおすすめします。

投稿2016/01/27 04:09

YasuhiroMiyake

総合スコア1336

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

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

kantanopapan

2016/01/27 06:36

>Objective-c は第一引数のパラメータ名は省略 これswiftだけだと思ってました! (obj-cでもそうだとは。。それくらいobj-cさわってなくてすみませんすみません) >nextResponderメソッドがあるかのように書いています。 おっしゃる通りですね。いわれて気が付きました 回答ありがとうございます!
guest

0

以下の回答をしましたが、既にもっと丁寧且つ僕の内容を含んだ回答がされていました。
回答削除の方法がわからないためとりあえずこのままにしておきます。

このようなケースに限ってですが。

objc も swift も第一引数のラベルがありません。
(swift は付けることもできるけど、objc はどうなんだろう。。わかりませんすみません)
それを知っておけば、
a:b c:d という形において、a は引数のラベルではなくメソッド名ということが分かるかと思います。
したがって、 a(b, c:d) と変換できるかと思います。

投稿2016/01/27 04:28

編集2016/01/27 04:31
taiju59

総合スコア54

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

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

kantanopapan

2016/01/27 06:38

a:b c:d ↓ a(b, c:d) 例を書いていただきありがとうございます わかりやすいです obj-cの構文はこんな感じですよね [クラス名□メソッド名:第1引数の値□第2引数のパラメータ名:第2引数の値] 以下を頭に入れて変換しようと思います ・クラスのメソッド呼び出しはクラスの後ろにスペースつける ・引数はメソッド名の後ろにコロンつけてから指定(第1引数のパラメータ名省略だから) ・複数の引数はスペース区切り 回答ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問