0

構造体を変更してから、完了ブロックで新しいデータを取得する際に問題があります。コードは次のとおりです。

class APIRequestManager {

    func fetchCharacterExtendedData(completion: (json: [String: AnyObject], error: NSError?) -> Void) {

        // do some network stuff...
        let json = ["nickname": "Chris"]
        completion(json: json, error: nil)
    }
}

struct Character {

    let name: String?
    var extendedInfo: CharacterExtendedInfo?

    init(json: [String: AnyObject]) {

        name = json["name"] as? String
    }

    struct CharacterExtendedInfo {

        var nickname: String

        init(json: [String: AnyObject]) {

            nickname = json["nickname"] as! String
        }
    }
}

extension Character {

    mutating func fetchExtendedInfo(completion: () -> Void) {

        let requestManager = APIRequestManager() // Going one level deeper here seems to be the issue
        requestManager.fetchCharacterExtendedData() { json, error in

            self.extendedInfo = CharacterExtendedInfo(json: json)
            completion()
        }
    }
}

var character = Character(json: ["name": "Christopher"])
character.fetchExtendedInfo {
    print("Completed...")
    print("Nickname: \(character.extendedInfo?.nickname)") // The value's missing!
}

print("Nickname: \(character.extendedInfo?.nickname)") // Correctly prints "Chris"

これがなぜなのか、またどのように修正すれば、extendedInfo 変数が完了クロージャ内に正しく入力されるのかを説明できますか?

ありがとう

4

0 に答える 0