我使用Swift 2来创建一个函数,该函数从我编写的类中创建了一堆对象。
现在,问题在于,当我添加一个新对象时我没有问题,我从函数和init()函数中多次检查它存储数据。 (从init()函数打印self.myVariable工作)。
然而,稍后我会去检索我的变量,例如
if let dog: Animal? = Animal.init(id : "12345"){
print(dog?.legs)}
即使我检查了Animal类并且它成功初始化了Animal对象" dog",它打印为nil。
如果有人知道为什么会发生这种情况会非常有用和赞赏。
答案 0 :(得分:0)
这是对您的班级代码here的回应。
在init函数内部,您永远不会设置类变量id。你可以按如下方式设置它:
query.getObjectInBackgroundWithId(id as String) { (object: PFObject?, error: NSError?) -> Void in
if error != nil {
print(error)
}
else {
if let atm = object {
print("ATM found")
self.bank = atm["bank"] as? NSString
self.type = atm["type"] as? NSNumber
self.location = atm["location"] as? PFGeoPoint
self.description = atm["description"] as? NSString
// Set id to whatever you'd like here
self.id = atm.objectId!
}
}
}
答案 1 :(得分:0)
我不熟悉PFQuery,但由于它使用了完成处理程序,因此它对getObjectInBackground的调用异步响应。这意味着当你从init(id:...)获得你的对象时,它在bank字段中还没有值。所以结果?.bank打印为零,因为银行是零,而不是因为结果是零。
执行完成处理程序后,bank将拥有其值(如果没有发生错误)但是在init()和let结果之间的短时间内不会发生这种情况:ATM? = ...条件。