2

だからここに私のコードがあります

func retrieveAndAssignHighScoreFromCloudKit() {
    let high = highScore
    database.fetchRecordWithID(getRecordID(high), completionHandler: { [weak self]
        (record: CKRecord?, error: NSError?) in
        if error != nil {
            print(self!.highScore)
        // blah blah blah...
}

したがって、この関数の最初の行で、highScore を呼び出して別のものに割り当てることができますが、クロージャー内で Xcode によって「self!」の使用が強制されます。そうすることで、オプションを事前に呼び出すと、それがnilではないことがわかりますが、どうにかしてオプションをアンラップします。私は本当に混乱しており、オプションを nil としてアンラップすることに関する基本的な質問がたくさんありますが、これに関連しているように見えるものはありません。

どうもありがとうございました!

編集:「弱い」を「所有されていない」に切り替えようとすると、同じ行でクラッシュし、ブレークポイントがないにもかかわらず「スレッド 3: EXC_BREAKPOINT」が発生します。このメッセージは別の画面では緑色で表示され、その行は強調表示されません

4

2 に答える 2

-1

次のようstrongに使用しようとすると、参照を使用できます。self

func retrieveAndAssignHighScoreFromCloudKit() {
        let high = highScore
        database.fetchRecordWithID(getRecordID(high), completionHandler: { [weak self]
            (record: CKRecord?, error: NSError?) in
            if error != nil {
                
                guard let strongSelf = self else {
                    return
                }
                print(strongSelf.highScore)
                // blah blah blah...
            }
        }
    }
于 2016-08-09T06:54:20.447 に答える