Istnieje kilka rzeczy, które możesz zrobić:
var rating: NSNumber
var ratingDouble: Double
ratingDouble = rating as Double // 1
ratingDouble = Double(rating) // 2
ratingDouble = rating.doubleValue // 3
- pierwszy element wykorzystuje
Objective-C
mostków co pozwala AnyObject
i NSNumber
być oddane jako Double|Float|Int|UInt|Bool
.
- Drugi element prawdopodobnie przechodzi przez konstruktora z podpisem
init(_ number: NSNumber)
. Nie mogłem go znaleźć w module lub dokumentach, ale przekazanie AnyObject
wygenerowało błąd, który nie może być niejawnie spuszczony na NSNumber
, więc musi tam być, a nie tylko mostkować.
- Trzeci element nie wykorzystuje funkcji językowych w ten sam sposób. Po prostu korzysta z tego, że
doubleValue
zwraca Double
.
Jedną z zalet 1 jest to, że działa również na AnyObject
więc kod może być:
let ratingDouble = self.prodResult!.prodsInfo.prodList[indexPath.row].avgRating! as Double
Zauważ, że usunąłem ?
ze swojej funkcji i przeniósł !
w każdym połączeniu.! unikasz bezpieczeństwa ?
, więc nie ma powodu, by robić to wspólnie.
Does ratingDouble = ocena nie działa? Swift powinien wspierać łączenie tych dwóch elementów. –
Jeśli to zrobię: błąd: "NSNumber" nie można zmienić na "Double". Ale mogę to zrobić: ratingDouble = rating.doubleValue –