Es gibt mehrere Dinge, die Sie tun können:
var rating: NSNumber
var ratingDouble: Double
ratingDouble = rating as Double // 1
ratingDouble = Double(rating) // 2
ratingDouble = rating.doubleValue // 3
- Das erste Element nutzt
Objective-C
Brücken die AnyObject
und NSNumber
erlaubt zu gieße als Double|Float|Int|UInt|Bool
. Das zweite Element durchläuft vermutlich einen Konstruktor mit der Signatur init(_ number: NSNumber)
. Ich konnte es nicht in dem Modul oder in den Dokumenten finden, aber die Übergabe AnyObject
in erzeugte einen Fehler, dass es nicht implizit zu NSNumber
niedergeschlagen werden kann, also muss es dort sein und nicht gerade überbrücken.
- Das dritte Element verwendet Sprachfeatures nicht auf die gleiche Weise. Es nutzt nur die Tatsache aus, dass
doubleValue
eine Double
zurückgibt.
Ein Vorteil von 1 ist, dass es funktioniert auch für AnyObject
so könnte Ihr Code sein:
let ratingDouble = self.prodResult!.prodsInfo.prodList[indexPath.row].avgRating! as Double
Bitte beachte, dass ich die ?
aus Ihrer Funktion entfernt und bewegt die !
in Jedes Mal, wenn Sie verwenden.! Sie vermeiden die Sicherheit von ?
, also gibt es keinen Grund, beides zusammen zu tun.
funktioniert ratingDouble = Bewertung nicht konvertieren? Swift sollte die Überbrückung der beiden unterstützen. –
Wenn ich das tue: Fehler: "NSNumber" ist nicht in "Double" umwandelbar. Aber ich kann dies tun: ratingDouble = rating.doubleValue –