Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: EdisonОтветов: 1

Свифт 2

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

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

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

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

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

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

swiftswift3xcode8

Ответы

Ответ 1 · рейтинг 7 · Martin R

Начиная со 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)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы