2016-06-20 7 views
5

Swift 2Przeciążenia na '...' istnieć z tych typów Wynik: ClosedRange <Bound>, CountableClosedRange <Bound>

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

Missing etykietę argumentu 'zakres:' w wywołaniu

Swift 3 - nowy błąd

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

Nie '...' kandydaci produkować oczekiwany typ wyniku kontekstowe 'Zakres'

przeciążeń dla '...' istnieć z tych typów Wynik: ClosedRange, CountableClosedRange

Odpowiedz

7

Od Swift 3, ..< i ... wytwarzają różne rodzaje zakresów:

  • ..< wytwarza Range (lub CountableRange, w zależności od typu bazowego), który opisuje zakres półotwartości, który nie obejmuje górnej granicy.
  • ... produkuje ClosedRange (lub CountableClosedRange), który opisuje zamknięty zakres obejmujący górną granicę.

Jeśli randomInRange() oblicza liczbę losową w podanym zakresie, tym górna granica, to powinna być zdefiniowana jako

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

można nazwać jako

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