无法访问类对象变量

时间:2016-01-29 20:26:20

标签: ios swift class oop variables

我使用Swift 2来创建一个函数,该函数从我编写的类中创建了一堆对象。

现在,问题在于,当我添加一个新对象时我没有问题,我从函数和init()函数中多次检查它存储数据。 (从init()函数打印self.myVariable工作)。

然而,稍后我会去检索我的变量,例如

 if let dog: Animal? = Animal.init(id : "12345"){
print(dog?.legs)}

即使我检查了Animal类并且它成功初始化了Animal对象" dog",它打印为nil。

如果有人知道为什么会发生这种情况会非常有用和赞赏。

这里是实际代码的链接,Animal类只是一个例子,但这可能更有用:Class& Function

2 个答案:

答案 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? = ...条件。