Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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 Denit没有被调用。帮我修一下_Swift_Weak_Deinit - Fatal编程技术网

Swift Denit没有被调用。帮我修一下

Swift Denit没有被调用。帮我修一下,swift,weak,deinit,Swift,Weak,Deinit,我的预期答案是“嗨,世界!Handler正在被去初始化。”如何解决这个问题?我只想更改一行代码,而不是整个代码。重写: class MyClass { func greeting() { answer += "Hello, World!" } } class Handler { var closure: (() -> Void)? let obj = MyClass() func setupClosur

我的预期答案是“嗨,世界!Handler正在被去初始化。”如何解决这个问题?我只想更改一行代码,而不是整个代码。

重写:

class MyClass {
    func greeting() {
        answer += "Hello, World!"
    }
}

class Handler {
    var closure: (() -> Void)?
    let obj = MyClass()
    
    func setupClosure() {
        closure = {
            self.obj.greeting()
        }
    }
    
    deinit {
        answer += "Handler is being deinitialized."
    }
}

var answer: String = ""
func handlerDeinitialization() -> String {
    var handler: Handler? = Handler()
    handler!.setupClosure()
    handler!.closure!()
    handler = nil
    return answer
}

print(handlerDeinitialization())
(请注意,我更改了不止一行。但我的答案是如何通过只更改一行来实现这一点的巨大线索。)

重写:

class MyClass {
    func greeting() {
        answer += "Hello, World!"
    }
}

class Handler {
    var closure: (() -> Void)?
    let obj = MyClass()
    
    func setupClosure() {
        closure = {
            self.obj.greeting()
        }
    }
    
    deinit {
        answer += "Handler is being deinitialized."
    }
}

var answer: String = ""
func handlerDeinitialization() -> String {
    var handler: Handler? = Handler()
    handler!.setupClosure()
    handler!.closure!()
    handler = nil
    return answer
}

print(handlerDeinitialization())

(请注意,我更改了不止一行。但我的回答是如何通过只更改一行来完成的一个巨大线索。)

处理程序的闭包不一定在
处理程序的定义中被取消初始化。闭包是引用类型-当对该闭包的最后一个引用被取消初始化时,它们被取消初始化。独立于这个小小的吹毛求疵,您可以随时将对象中的闭包引用设置为nil。处理程序的闭包不一定在
处理程序
的定义中被取消初始化。闭包是引用类型-当对该闭包的最后一个引用被取消初始化时,它们被取消初始化。独立于这个小挑剔,您可以随时将对象中的闭包引用设置为nil。谢谢您的回答。老实说,这是对CodeSignal的测试。他们要求编辑一行代码。不超过一行。是的,我知道怎么做。但我想他们想知道你是否知道怎么做。我的回答是一个巨大的线索;如果你知道一些Swift,或者愿意学习,你将能够跟随它的方向。谢谢你的回答。老实说,这是对CodeSignal的测试。他们要求编辑一行代码。不超过一行。是的,我知道怎么做。但我想他们想知道你是否知道怎么做。我的回答是一个巨大的线索;如果你知道一些Swift,或者愿意学习,你将能够跟随它的方向。