关键值观察Swift中的多对多关系

时间:2015-04-02 10:30:08

标签: objective-c cocoa swift key-value-observing key-value-coding

当您想要在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)
}

0 个答案:

没有答案