func customPrint(number: Int, via printingFunction: @escaping (Int) -> Void) {
printingFunction(number)
}
class Temp {
func tempPrintingFunction(number i: Int) {
print(i)
}
func print5() {
customPrint(number: 5) { [self] number in
tempPrintingFunction(number: number)
}
}
}
Temp().print5()
このコードは問題ありません。コンパイルして期待どおりに動作します。
しかし、代わりにキャプチャリストに関数自体を渡すとself
:
func print5() {
customPrint(number: 5) { [tempPrintingFunction] number in
tempPrintingFunction(number: number)
}
}
エラーが発生します:
呼び出しの不要な引数ラベル 'number:'
ラベルをはがすと、すべてが正常に戻ります。
しかし、それは奇妙です。それは何ですか?バグまたは機能?ドキュメントでもフォーラムでも、これに関する情報は見つかりません。
おまけの質問:キャプチャ リスト
に渡すときにコードがクラッシュしないのはなぜですか? unowned self
クラッシュしませんか?クラッシュさせたい
編集:
ちなみに、この状況でキャプチャself
と機能自体に違いはありますか?リテインサイクルなどでいうと、機能をキャプチャーすれば、キャプチャーself
もされますよね。