【问题标题】:How does swift infer that num1 and num2 are integers?swift 如何推断 num1 和 num2 是整数?
【发布时间】:2015-08-19 17:07:36
【问题描述】:

我对 Swift 如何推断 num1num2 是整数感到困惑。该函数正在接受一个 Ints 数组,没错,但是既然 num1num2 与 Ints 数组相关,那么 swift 怎么办???

func mean4 (numbers: [ Int ] ) -> Double {

let sum = numbers.reduce(0, combine: { num1, num2 in 

return num1 + num2 04: })

【问题讨论】:

    标签: xcode swift closures type-inference


    【解决方案1】:

    num2

    因为numbers 数组是[Int] 类型,所以它知道num2 或下一个元素将是Int

    num1

    因为你的起始值是0,所以推断减少值,或者num1也是Int

    【讨论】:

      【解决方案2】:

      reduce 函数定义为:

      extension SequenceType {
          public func reduce<T>(initial: T, @noescape combine: (T, Self.Generator.Element) -> T) -> T
      }
      

      Self.Generator.Element 指的是数组元素类型,即Int。这意味着 num2 是一个 Int。从你传入的初始值0,可以推断出T也是一个Int。

      【讨论】:

      • 这是reduce函数?我还没有学过......当它清楚地说明它只是基础时,它作为一个初学者很困惑,这本书应该是一步一步教的,它怎么能像这样跳转到reduce()没有即使解释了函数的定义,它所做的只是说这个函数迭代数组中的元素,它只是概括它......?
      • 您可以通过 ⌘-单击代码中的 reduce 来找到它。一旦你了解了协议、序列、泛型和闭包,它就会变得有意义!
      • 这本书还没有涵盖这些……即使我对这个 reduce() 没有很好的理解,继续下去是否仍然安全?
      • 绝对!我想说reduce 的重点是学习函数式编程概念,而不是学习它在 Swift 中如何工作的血腥细节。这是一个常见的概念:en.wikipedia.org/wiki/Fold_(higher-order_function)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多