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