我有一个完成处理程序函数,返回一个参数或多个。
在客户端,执行完成处理的时候,我想有一个unowned
参考self
,以及具有访问传递的参数。
这是说明这个问题,我试图达到的目标游乐场例子。
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
//...
}
}
}
正如我在我的评论说:
Struct().function { [unowned self] (string) in
//your code here
}
捕获列表和封闭的参数应该是在从封闭Apple Documentation更多信息的顺序
定义捕获列表
在捕获列表中的每个项目是弱或无主关键字与一个类实例的引用(如个体经营)配对或与某个值初始化的变量(如委托= self.delegate!)。这些配对的是一对方括号,以逗号分隔的内写入。
将捕获列表中的封闭的参数列表前,如果提供他们返回类型:
lazy var someClosure: (Int, String) -> String = {
[unowned self, weak delegate = self.delegate!] (index: Int, stringToProcess: String) -> String in
// closure body goes here
}
如果关闭不指定参数列表或返回类型,因为他们可以从上下文推断,发生在封闭的一开始捕获列表中,随后在关键字:
lazy var someClosure: () -> String = {
[unowned self, weak delegate = self.delegate!] in
// closure body goes here
}