Существуют перегрузки для '' со следующими типами результатов: ClosedRange‹Bound›, CountableClosedRange‹Bound›

Свифт 2

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

Отсутствует метка аргумента «диапазон:» в вызове

Swift 3 — новая ошибка

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

Никакие кандидаты «...» не дают ожидаемого типа контекстуального результата «Диапазон».

Перегрузки для '...' существуют со следующими типами результатов: ClosedRange, CountableClosedRange.


person Edison    schedule 20.06.2016    source источник


Ответы (1)


Начиная со 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)
person Martin R    schedule 20.06.2016