質問: これは、送信者を取り込んでそのパラメーターのラベルを付けるswift関数のアンチパターンですか? これは私がココアのいたるところに見ているものです:func someaction(_ sender: any) これは次のように呼ばれます:someaction(someobject) これは私にとって非常に混乱する可能性があります。悪名高い例はnsviewサブクラスにあります。print("hello, world!") これは標準のswiftコンソールに印刷するための構文ですが、nsviewで、送信者が文字列"hello, world!"であると主張して、プリンタダイアログを開きます。 、私のコードで私はこれを始めました:func someaction(sender: any) しかし、私がココアでこれをnoneと見ているという事実は、それがアンチパターンであることを意味するのではないかと心配しています。 そうですか、それとも私は正しいですか?
回答: いいえ、そうではありません。純粋なswiftはおそらく_を使用せず、むしろsender、またはラベル、次に変数名を優先します。_の使用はすべてswiftコードは、obj-cがこの変更のおかげでswift 3に変換される方法だからです。 名前の背後にあるswift 3の理論的根拠 。おそらく、obj-cやcocoaと緊密に連携していて、命名規則を同じに保ちたい場合は、_を使用できますが、必須ではありません。 これはappleの許容可能なswift _を使用しない3つのコード のドキュメントからの直接の例です:import uikit class myviewcontroller: uiviewcontroller { let mybutton = uibutton(frame: cgrect(x: 0, y: 0, width: 100, height: 50)) override init?(nibname nibnameornil: string?, bundle nibbundleornil: bundle?) { super.init(nibname: nibnameornil, bundle: nibbundleornil) let action = #selector(myviewcontroller.tappedbutton) mybutton.addtarget(self, action: action, forcontrolevents: .touchupinside) } func tappedbutton(sender: uibutton?) { print("tapped button") } required init?(coder: nscoder) { super.init(coder: coder) } }