【问题标题】:Swift closure type inferenceSwift 闭包类型推断
【发布时间】:2014-07-31 02:57:56
【问题描述】:

为什么会这样:

var numbers = [20, 19, 7, 12]
numbers.map({
(number:Int)->Int in
if number % 2 == 0 {return number * 3}
else {return 0}
})

但不是这个:

var numbers = [20, 19, 7, 12]
numbers.map({
(number) in
if number % 2 == 0 {return number * 3}
else {return 0}
})

给出错误消息:“无法将表达式的类型 'Array' 转换为类型 'U'”?

Apple 的文档说:“在将闭包作为内联闭包表达式传递给函数时,总是可以推断出参数类型和返回类型。”

【问题讨论】:

  • 测试版往往有错误。

标签: swift


【解决方案1】:

我可以将您的错误示例缩减为最简单的版本:

let x = numbers.map({
    (number) in
    return number
    })

请注意,您实际上并没有使用内联闭包表达式。您尝试完成的内联版本是:

numbers.map({$0 % 2 == 0 ? $0 * 3 : $0})

【讨论】:

  • 我的理解是“内联闭包”是指一个被定义为被传递的闭包,而不是一个独立的闭包(一个命名函数)。这是您使用它的方式,还是您的意思是在单行中定义的闭包?无论哪种方式,似乎 Swift 都应该能够推断出必要的类型……例如,为什么您的“最简单版本”不起作用?
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
相关资源
最近更新 更多