当您想要在Objective-C中通知NSMutableArray
的更改时,Apple的文档鼓励您实现可选的可变访问器:
强烈建议您实现这些可变访问器,而不是依赖于直接返回可变集[sic]的访问器。在对关系中的数据进行更改时,可变访问器的效率会更高。
至少,为了使设置正常工作,您需要以下内容。 (这是非常简单的,因为Xcode的代码完成工具会猜测你的目标,并为你提供签名。)
// Assumes the class to which these methods belong has an NSMutableArray
// property called <children>.
-(void)insertObject:(NSNumber *)object inChildrenAtIndex:(NSUInteger)index {
[self.children insertObject:object atIndex:index];
}
-(void)removeObjectFromChildrenAtIndex:(NSUInteger)index {
[self.children removeObjectAtIndex:index];
}
我最近尝试在Swift中做类似的事情(使用NSMutableArray
而不是一个可变的Swift数组),但 Xcode 没有提供签名提示我尝试的签名什么都不做(见下文)。
我只是简单地签名错误,还是让苹果公司放弃了在Swift中实现这些访问者的需要?或许还有一种我不知道的新模式?
// These accessors don't trigger KVO notifications.
func insertObject(object: AnyObject!, inChildrenAtIndex index: Int) {
children.insertObject(object, atIndex: index)
}
func removeObjectFromChildrenAtIndex(index: Int) {
children.removeObjectAtIndex(index)
}
func replaceObjectInChildrenAtIndex(index: Int, withObject object: AnyObject!) {
children.replaceObjectAtIndex(index, withObject: object)
}