简体   繁体   English

如何在 Swift 中使用初始化器作为闭包

[英]How to use initializer as Closure in Swift

How to pass an initializer as a parameter to a function?如何将初始值设定项作为参数传递给函数?

class A {
    var num: Int
    init() {
        num = 3
    }
}

func f(# createA: () -> A) -> A {

   return createA()
}


f(createA: A)   // This does not work

Update更新

Thank you for The Paramagnetic Croissant's answer:感谢顺磁性羊角面包的回答:

f(createA: { A() }) // Correct

But what if the initializer has an input?但是如果初始化器有一个输入呢?

class A {
    var num: Int
    init(a : Int) {
        num = 3
    }
}
func f(# createA: (a: Int) -> A) -> A {

    return createA(a: 1)
}

let a = f(createA: {A(a: Int)}) // Wrong

Update OK I figured out:更新确定我想通了:

f(createA: { a in A(a: a) })

This works in Swift 2.0 beta (don't know about 1.2):这适用于 Swift 2.0 beta(不知道 1.2):

func f(createA createA: () -> A) -> A {
    return createA()
}


f(createA: A.init)

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

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