【问题标题】:How can I create an array of functions?如何创建函数数组?
【发布时间】:2014-06-06 18:39:26
【问题描述】:

我正在尝试在 Swift 中构建 Promises 的基本实现,并且我需要能够向数组添加函数,但我不确定如何让它工作。

class Promise {
    var pending = []

    func resolve() -> Void {
    }

    func then(success: (Void -> Void)) -> Promise {
        // how do I add success to pending array?
        return self
    }
}

let p = Promise()
p.then({println("finished")})

我发现当我尝试做这样的事情时,Swift Playground 不会建议 append

self.pending.append(success)

这是有道理的——Swift 无法推断出self.pending 的类型——但这就是我的问题所在。我不确定如何预定义 (Void -> Void) 函数数组。

是否可以在 Swift 中创建函数数组?我会假设是这样,函数是一等公民。

【问题讨论】:

  • 这个我没试过,但是明显的var pending: (Void->Void)[] = [] 不行吗?
  • Swift 游乐场似乎不喜欢var pending = (Void -> Void)[] = []

标签: swift


【解决方案1】:

绝对有可能,只需将数组初始化为:

var pending = Array<(Void -> Void)>()

甚至是鸽友

var pending = Array<()->()>()

var pending: [(Void->Void)] = []

var pending: [(()->())] = []

var penguins: [<(") <(")] = [] // kidding

【讨论】:

  • (Void -&gt; Void)[]
  • (Void -> Void)[] 对我不起作用,但 `Array Void)> 完美工作
  • 如果你想变得更高级,可以使用Array&lt;()-&gt;()&gt;()
  • @AlexWayne 我的意思是var array: (() -&gt; ())[] = []var array: (Void -&gt; Void)[] = []
  • 整洁!这是一个更完整的工作示例:gist.github.com/Squeegy/5d5c73a373b0c4839280
【解决方案2】:

这应该可行:

var pending: (() -> ())[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多