【发布时间】:2015-08-24 20:24:38
【问题描述】:
我正在使用 Alamofire 解析 JSON 数据。除了 'var id: JSON?' 在下面提到的代码中一切正常变量虽然更新得很好,但它在某个点(在底部)一直返回 nil 。我需要将此变量放入过滤器闭包中。
class GreetingObjectHandler {
var greetings: [Greeting] = []
var id: JSON? //this variable
init(filename: String) {
Alamofire.request(.GET, "http://localhost:2403/users/me")
.responseJSON { (req, res, data, error) in
if(error != nil) {
NSLog("Error: \(error)")
}
else {
var parse = JSON(data!)
self.id = parse["id"] //updating
println(self.id) //it's fine here
}
}
let filePath = NSURL(string: "http://localhost:2403/users")
let jsonData = NSData(contentsOfURL:filePath!)
let json = JSON(data: jsonData!, options: NSJSONReadingOptions.AllowFragments, error: nil)
for (key: String, subJson: JSON) in json {
var language:String?, link: String?, description:String?, greetingText: String?
for (key1, value:JSON) in subJson {
switch key1 {
case "displayName": language = value.string
case "id": link = value.string
case "username": description = value.string
case "mainSkill": greetingText = value.string
default: break
}
}
let greeting = Greeting(language: language, link: link, description: description, greetingText: greetingText)
self.greetings.append(greeting)
self.greetings = self.greetings.filter { $0.link != "\(self.id)"} //this filter
println(self.id) //returns nil
}
}
func getGreetingsAsAnyObjects() -> [String: [AnyObject]]{
return [Constant.GreetingOBJHandlerSectionKey: greetings.map { $0 as AnyObject }]
}
}
【问题讨论】:
-
request() 是一个异步操作。如果不向它们添加一些内容,例如 println("1 (self.if)"),您将无法知道首先调用哪一行
-
它返回 nil 是因为它在主线程上运行并且请求操作尚未成功完成为 id 属性赋值。