我知道如何初始化一个不带参数的闭包,比如:
struct foo
但是,我无法弄清楚如何初始化闭包:
class testClass {
var myClosure: () -> ()
init(){
myClosure = {}
}
}
我该怎么做?
答案 0 :(得分:5)
类型(Int) -> ()
的闭包需要一个参数(Swift会告诉你,不能隐式忽略该参数)。
因此,如果您想要一个带有一个参数的闭包,则必须明确指定:
let myClosure: (Int) -> () = { parameter in }
(如果您不需要参数,可以将其替换为通配符以忽略它)
let myClosure: (Int) -> () = { _ in }
或者,您可以使用隐式参数($0
,$1
等),但它们仅在您在闭包中的某处使用参数时才起作用(例如,通过将其分配给另一个变量或传递它作为函数的参数):
let myClosure: (Int) -> () = { print($0) }
答案 1 :(得分:5)
简单示例:
class TestClass {
var myClosure: (Int) -> ()
init(){
func myFunc(_:Int) {}
self.myClosure = myFunc
}
}
或使用匿名函数:
class TestClass {
var myClosure: (Int) -> ()
init(){
self.myClosure = {_ in}
}
}
或者,如果声明myClosure
:
class TestClass {
var myClosure : (Int) -> () = {_ in}
init(){
}
}
但是,如果您在初始化时没有myClosure
的值,为什么不将它设为可选项?
class TestClass {
var myClosure: ((Int) -> ())?
init(){
}
}