我有一个带有完成处理程序的函数,返回一个或多个参数。
在客户端,当执行完成处理程序时,我希望unowned
引用self
,并且可以访问传递的参数。
这是Playground示例,说明了我正在努力实现的问题和目标。
import UIKit
struct Struct {
func function(completion: (String) -> ()) {
completion("Boom!")
}
func noArgumentsFunction(completion: () -> Void) {
completion()
}
}
class Class2 {
func execute() {
Struct().noArgumentsFunction { [unowned self] in
//...
}
Struct().function { (string) in // Need [unowned self] here
//...
}
}
}
答案 0 :(得分:4)
正如我在评论中所说的那样
Struct().function { [unowned self] (string) in
//your code here
}
捕获列表和关闭参数应该是关闭中的顺序更多信息来自Apple Documentation
定义捕获列表
捕获列表中的每个项目都是一对 带有类实例引用的弱或无主关键字(例如 as self)或用某个值初始化的变量(例如delegate = self.delegate!)。这些配对写在一对正方形内 括号,用逗号分隔。
将捕获列表放在闭包的参数列表之前并返回 输入时输入:
lazy var someClosure: (Int, String) -> String = {
[unowned self, weak delegate = self.delegate!] (index: Int, stringToProcess: String) -> String in
// closure body goes here
}
如果闭包没有指定参数列表或返回类型,因为 他们可以从中推断出来 上下文,将捕获列表放在关闭的最开始, 后跟in关键字:
lazy var someClosure: () -> String = {
[unowned self, weak delegate = self.delegate!] in
// closure body goes here
}
答案 1 :(得分:1)