在Swift中初始化闭包

时间:2018-04-24 16:53:38

标签: ios swift

我知道如何初始化一个不带参数的闭包,比如:

struct foo

但是,我无法弄清楚如何初始化闭包:

class testClass {
    var myClosure: () -> ()

    init(){
        myClosure = {}
    }
}

我该怎么做?

2 个答案:

答案 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(){
    }
}