Ios 是否设置了isn';t观察模型属性';s change-Swift
嘿,我正在使用didSet从字典中设置一个键数组,这样当我试图访问数组以填充集合视图单元格时,可以避免复制。didSet应该在Cafe对象发生更改时发生,但实际情况并非如此Ios 是否设置了isn';t观察模型属性';s change-Swift,ios,arrays,swift,nsdictionary,didset,Ios,Arrays,Swift,Nsdictionary,Didset,嘿,我正在使用didSet从字典中设置一个键数组,这样当我试图访问数组以填充集合视图单元格时,可以避免复制。didSet应该在Cafe对象发生更改时发生,但实际情况并非如此 private var _hashArray: [String]? var hashArray: [String]? { return _hashArray } var cafe: Cafe? { didSet{ if let hashCounts = cafe?.hashtagCount
private var _hashArray: [String]?
var hashArray: [String]? {
return _hashArray
}
var cafe: Cafe? {
didSet{
if let hashCounts = cafe?.hashtagCounts {
_hashArray = Array(hashCounts.keys)
}
}
}
当我打印出标记时,它会正确地打印出字典及其键和值,但当我尝试打印hashArray或_hashArray时,它是零。你能告诉我哪里做错了吗?谢谢当类的属性更改时,不会调用属性观察器。这是因为类是引用类型,即使其属性可能更改,也不会分配新对象,因此不会触发属性观察者 然而,结构是值类型,因此更改结构的属性会导致分配一个新对象来存储它。此新对象被指定为替换当前对象,以便特性观察者看到此更改并激发。如果用
let
而不是var
初始化结构,您会注意到不能用点符号更改它的任何属性。这是因为更改单个属性会“更改”整个对象(创建一个新对象)
因此,将
Cafe
更改为结构而不是类,并且当更改hashtagCounts
时应触发属性观察者。当更改类的属性时,不调用属性观察者。这是因为类是引用类型,即使其属性可能更改,也不会分配新对象,因此不会触发属性观察者
然而,结构是值类型,因此更改结构的属性会导致分配一个新对象来存储它。此新对象被指定为替换当前对象,以便特性观察者看到此更改并激发。如果用let
而不是var
初始化结构,您会注意到不能用点符号更改它的任何属性。这是因为更改单个属性会“更改”整个对象(创建一个新对象)
因此,将
Cafe
更改为结构而不是类,并且在更改hashtagCounts
时应触发属性观察器。是Cafe
结构还是类?Cafe是classIsCafe
结构还是类?Cafe是类
RatingService.retrieveForCafe(yelpID: (cafe?.id)! , completion: { (tags) in
self.cafe?.hashtagCounts = tags
self.hashtagCollectionView.reloadData()
})
}
else {
print("is nil")
}