0
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もされますよね。

4

0 に答える 0