我在改变结构然后在完成块中检索新数据时遇到问题。这是代码:
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 变量吗?
谢谢