超负荷......&#39;存在这些结果类型:ClosedRange <bound>,CountableClosedRange <bound>

时间:2016-06-20 06:36:44

标签: swift swift3 xcode8

Swift 2

let gap = CGFloat(randomInRange(StackGapMinWidth...maxGap))
  

缺少参数标签&#39;范围:&#39;在电话中

Swift 3 - 新错误

let gap = CGFloat(randomInRange(range: StackGapMinWidth...maxGap))
  

不,&#39; ......&#39;候选人产生预期的上下文结果类型&#39;范围&#39;

     

超载&#39; ...&#39;存在这些结果类型:ClosedRange,CountableClosedRange

1 个答案:

答案 0 :(得分:7)

从Swift 3开始,..<...会产生不同类型的范围:

  • ..<生成一个Range(或CountableRange,具体取决于基础类型),它描述了一个不包含上限的半开范围。
  • ...生成ClosedRange(或CountableClosedRange),其中描述了包含上限的封闭范围。

如果randomInRange()计算给定范围内的随机数, 包括上限,则应将其定义为

func randomInRange(range: ClosedRange<Int>) -> Int {
    // ...
}

您可以将其称为

let lo = 1
let hi = 10
let r = randomInRange(range: lo ... hi)