Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么下面的代码会导致无限递归?_Swift - Fatal编程技术网

Swift 为什么下面的代码会导致无限递归?

Swift 为什么下面的代码会导致无限递归?,swift,Swift,运行此操作会导致无限递归,最终导致EXC_BAD_访问崩溃。知道为什么会这样吗 奇怪的是,只有在定义了removedefinitionobject时才会发生这种情况。如果我删除该功能,问题就会消失。来自“键值编码编程指南” (我的重点): mutableSetValueForKey:的默认搜索模式如下: 在接收方的类中搜索名称与 模式addObject:和removeObject:(对应于 NSMutableSet基本方法addObject:和removeObject: 分别)和添加:和删除:

运行此操作会导致无限递归,最终导致EXC_BAD_访问崩溃。知道为什么会这样吗

奇怪的是,只有在定义了
removedefinitionobject
时才会发生这种情况。如果我删除该功能,问题就会消失。

来自“键值编码编程指南” (我的重点):

mutableSetValueForKey:
的默认搜索模式如下:

  • 在接收方的类中搜索名称与 模式
    addObject:
    removeObject:
    (对应于
    NSMutableSet
    基本方法
    addObject:
    removeObject:
    分别)和
    添加:
    删除:
    (对应于 NSMutableSet方法unionSet:和minusSet:)。 如果至少找到一种添加方法和至少一种删除方法
    NSMutableSet
    将生成发送到集合代理对象的消息 在
    添加对象:
    删除对象:
    添加:
    的某些组合中, 和
    remove:
    发送给原始收件人的消息
    mutableSetValueForKey:
这意味着如果
addDefinitionsObject
removedDefinitionObject
然后,在您的类中实现

class TestClass : NSObject {

    var definitions: NSSet = NSSet()

    func addDefinitionsObject(value: AnyObject) {
        self.mutableSetValueForKey("definitions").addObject(value)
    }

    func removeDefinitionsObject(value: AnyObject) {
        // this method is never called
        self.mutableSetValueForKey("definitions").removeObject(value)
    }
}

var test = TestClass()
test.addDefinitionsObject("yo")
召唤


因此产生了递归。

Wow,生成的列表变量?将addDefinitionsObject的名称更改为其他名称也可以解决这个问题,这看起来很奇怪。你想实现什么?
self.mutableSetValueForKey("definitions").addObject(value)
self.addDefinitionsObject(value)