繁体   English   中英

在Swift中初始化闭包

[英]Initialize closure in Swift

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

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

    init(){
        myClosure = {}
    }
}

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

var myClosure: (Int) -> ()

我怎么做?

类型(Int) -> ()的闭包需要一个参数(Swift会告诉你,不能隐式忽略该参数)。

因此,如果您想要一个带有一个参数的闭包,则必须明确指定:

let myClosure: (Int) -> () = { parameter in }

(如果您不需要参数,可以用通配符替换它来忽略它)

let myClosure: (Int) -> () = { _ in }

或者,您可以使用隐式参数( $0$1等),但它们仅在闭包中某处使用参数时才起作用(例如,通过将其分配给另一个变量或将其作为参数传递给函数):

let myClosure: (Int) -> () = { print($0) }

简单的例子:

class TestClass {
    var myClosure: (Int) -> ()
    init(){
        func myFunc(_:Int) {}
        self.myClosure = myFunc
    }
}

或者使用匿名函数:

class TestClass {
    var myClosure: (Int) -> ()
    init(){
        self.myClosure = {_ in}
    }
}

或者你可以在myClosure的声明中进行myClosure

class TestClass {
    var myClosure : (Int) -> () = {_ in}
    init(){
    }
}

但是如果你在初始化时没有myClosure的值,为什么不把它变成一个Optional?

class TestClass {
    var myClosure: ((Int) -> ())?
    init(){
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM