【问题标题】:Operators as callback functions in Swift运算符作为 Swift 中的回调函数
【发布时间】:2016-02-14 07:23:57
【问题描述】:

在 Swift 中,运算符被声明为函数。这是否意味着它们也可以用作回调函数?如果是这样,怎么做?如果不是,为什么?

想法是,根据两个不同数字的值,对它们应用不同的运算符。

【问题讨论】:

  • 是的,它们可以用作回调。但它们作为回调没有多大意义,因为您无法提供要运行的自定义代码,假设您将 (+) 作为回调传递,这对您作为调用者没有多大作用。
  • 为什么没有意义?您在调用回调函数时提供运算符操作的值。这些值可能是变量,您可以根据要操作的值提供不同的运算符。

标签: swift callback operators


【解决方案1】:

在 Swift 中,函数是第一类类型,您可以将它们作为参数传递给期望它们的其他函数。

回调只不过是另一个函数的参数。

把这一切放在一起意味着是的,你可以使用一个操作符作为回调,只要它的类型是兼容的。

例如你可以这样做:

[1, 2, 3, 4].reduce(0, combine: +)
// => 10

这是可能的,因为+ 的类型为(Int, Int) -> Int,当在Int 的数组上调用时,它与reducecombine: 参数的预期类型匹配。

另一个例子:

func foo(a: Int, f: (Int, Int) -> Int) -> Int {
  return { a, f in
    return f(a, 42)
  }
}

foo(1, -)
// => 41

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多