我在iOS应用程序中使用Parse object store,我为Parse对象创建了一个自定义子类,看起来有点像这样:
class MyThing: PFObject, PFSubclassing {
// ...PFSubclassing protocol...
@NSManaged var name: String
@NSManaged var somethingElse: String
@NSManaged var relatedThings: PFRelation
}
relatedThings
属性有效:我可以从商店中获取相关对象。但是,我不断收到Parse的警告:
[Warning]: PFRelation properties are always readonly,
but MyApp.MyThing.relatedThings was declared otherwise.
在Objective-C中,我可以轻松地将该属性标记为只读,但我不确定如何在Swift中执行此操作以使警告静音。
let
不允许使用var
代替@NSManaged
。
添加private(set)
也没有效果:
@NSManaged private(set) var relatedThings: PFRelation
那么Parse如何期望我宣布关系属性呢?
答案 0 :(得分:3)
现在你应该使用:
var relatedThings: PFRelation! {
return relationForKey("relatedThings")
}
答案 1 :(得分:2)
Tom's answer对我不起作用,因为PFObject
不是NSManagedObject
的子类,因此它没有实现willAccessValueForKey
,{{1} }和primitiveValueForKey
方法。
但是,使用didAccessValueForKey
自己的PFObject
方法是正确的等效解决方案:
objectForKey
您仍然需要强制转换方法返回到var relatedThings: PFRelation! {
return objectForKey("relatedThings") as? PFRelation
}
的值,或者根据Tom的版本,将属性的类型转换为可选项。
答案 2 :(得分:1)
以下是您如何使用Swift创建只读Core Data属性。我不知道这是否是Parse正在寻找的东西,但它是如何在Swift中起作用的。
虽然Xcode在属性上生成>> C
C =
[3x1 double]
[3x1 double]
[ 4]
[2x1 double]
>> celldisp(C)
C{1} =
1
6
8
C{2} =
2
3
7
C{3} =
4
C{4} =
5
9
个NSManagedObject
子类,但实际上并不需要它。用等效的Swift计算属性替换@NSManaged
属性,使用Core Data原语访问器来获取/设置属性值,这很好。您不通过不包含设置器就可以使该属性有效。
这意味着用以下内容替换现有的@NSManaged
声明:
relatedThings
此var relatedThings : PFRelation? {
get {
self.willAccessValueForKey("relatedThings")
let things = self.primitiveValueForKey("relatedThings") as? PFRelation
self.didAccessValueForKey("relatedThings")
return things
}
}
代码与使用get
时的代码相同。但由于没有@NSManaged
,该属性是只读的。