这些结果类型存在“...”的重载:ClosedRange<Bound>、CountableClosedRange<Bound>

Overloads for '...' exist with these result types: ClosedRange<Bound>, CountableClosedRange<Bound>

Swift 2

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

Missing argument label 'range:' in call

Swift 3 - 新错误

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

No '...' candidates produce the expected contextual result type 'Range'

Overloads for '...' exist with these result types: ClosedRange, CountableClosedRange

从 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)