2016-10-27 15 views
18

mam ten wiersz:Co to jest operator modulus (%) w swift 3?

randomIndex = Int(drand48() % Double(alphabetColors.count)) 

I Xcode 8 (Swift 3) mówi mi:

'%' is unavailable: Use truncatingRemainder instead 

operator ma tam już? Jak mam przekonwertować mój kod?

+0

Operator% jest operacją pozostałą, a nie operatorem modulo w Swift. Oto kilka rozmów na ten temat: https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160523/018679.html – wazy

Odpowiedz

21

Można po prostu śledzić komunikat diagnostyczny:

let randomIndex = Int(drand48().truncatingRemainder(dividingBy: Double(alphabetColors.count))) 

lub używając arc4random_uniform(_:) byłoby lepszym rozwiązaniem.

let randomIndex = Int(arc4random_uniform(UInt32(alphabetColors.count))) 
18

enter image description here

To wydaje się być dostępne dla mnie obecnie na Swift 3.1, więc możliwe, że dodano do tyłu.

Domyślam się, że to gdzieś w Fundacji i wymaga wyraźnego import Foundation

Aktualizacja

To jest tylko dla typów int. Wydaje się, że w przypadku gry podwójnej wymagana jest pozostała skrócenie.

+0

To dziwne, nie mogę znaleźć nic na ten temat na https://apple.github.io/swift-evolution/ dla Swift 3.1. Czy po twojej stronie nie ma biblioteki stron trzecich, która może wywołać takie zachowanie? – Kalzem

+2

Och, masz rację, znalazłem akapit na ten temat w oficjalnej dokumentacji https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html Nazywają to resztą * * operator – Kalzem