gpt4 book ai didi

swift - 在 swift 中传递函数与闭包 "weak self"作为参数

转载 作者:行者123 更新时间:2023-11-28 05:36:45 25 4
gpt4 key购买 nike

在很多示例中,人们使用闭包将函数作为参数传递:

sum.getSumOf(array: [1,2,3]) { [weak self] sum in
self?.result = sum
print(self?.result as Any)
}

据我所知,这是针对骑行问题所做的。但是传递函数而不是闭包呢?如何让这个功能变“弱”?

例如:

class Calculator {

let sum = Sum()
var result = 0

// passing a function

func doSum() {
sum.getSumOf(array: [1,2,3], handler: store(sum:))
}

// vs use closure

func doSumWeakSelf() {
sum.getSumOf(array: [1,2,3]) { [weak self] sum in
self?.result = sum
print(self?.result)
}
}

func store(sum:Int){
result = sum
print(result)
}
}

class Sum {

func getSumOf(array:[Int], handler: ((Int)->Void)) {
//step 2
var sum: Int = 0
for value in array {
sum += value
}

handler(sum)
}

}

最佳答案

首先,在您的示例中根本不需要weak。没有保留循环,因为处理程序没有转义。它立即执行并释放。在没有保留循环的情况下,您不应该使用 weak

即使在转义的情况下,也可能并不总是存在保留循环,因为闭包最终可能会被释放。但是,当有 @escaping 注释时,您只能通过文档真正了解这一点。

也就是说,对于您的具体问题,在此示例中:

func doSum() {
sum.getSumOf(array: [1,2,3], handler: store(sum:))
}

这会捕获 self(因为它是 store(sum:) 的隐式参数),并且不可能使 self 变弱使用此语法。在这种情况下没关系,因为没有保留循环,但如果有的话,如果您选择以这种方式传递方法,则无法解析它。

关于swift - 在 swift 中传递函数与闭包 "weak self"作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58401157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com