Swift:检索对象时,Parse子类动态var不包括在内

ril*_*lar 2 dynamic subclass parse-platform swift pfobject

从Parse Data Browser检索对象时,我无法获取对象属性.这是在我从"@NSManaged var friends"变为"dynamic var friends"之后发生的.甚至"name"在User.logInWithUsernameInBackground块中显示为nil,因为登录成功,这是疯狂的.用户的ACL设置为"公共读取".

用户对象:

class User : PFUser, PFSubclassing {

    dynamic var friends:[User]!
    dynamic var name:String!

     override class func load() {
        self.registerSubclass()
    }
}
Run Code Online (Sandbox Code Playgroud)

与朋友一起检索用户.println显示零

var query = User.query()
query.includeKey("friends")
query.getObjectInBackgroundWithId(currentUser.objectId) {
    (pfObject: PFObject!, error: NSError!) -> Void in
    if pfObject != nil {
        var user = pfObject as User
        var friends = user.friends as [User]
        println("friends: \(friends)") //nil
   } else {
        println(error)
   }
}
Run Code Online (Sandbox Code Playgroud)

登录.println显示零

User.logInWithUsernameInBackground(USERNAME, password:PASSWORD) {
        (user: PFUser!, error: NSError!) -> Void in
        if user != nil {
            println("Logged in with user: \(user.name)") //nil
        } else {
            println(error)
        }
    }
Run Code Online (Sandbox Code Playgroud)

ccw*_*den 6

对你来说看起来更深一点,似乎障碍是dynamic对Swift中修饰语的作用的误解.显然,dynamic在Swift中用于键值观察,而不是声明变量的访问器在运行时定义(@dynamic在Objective-C中做了什么)

有关dynamicSwift 的说明,请参阅此处https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-XID_8

这是为了说明为什么@NSManaged的工作方式与@dynamic在Objective-C中的工作方式相同 https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/BuildingCocoaApps/WritingSwiftClassesWithObjective-CBehavior.html#//apple_ref/DOC/UID/TP40014216-CH5-XID_66