ci sono diverse cose che puoi fare:
var rating: NSNumber
var ratingDouble: Double
ratingDouble = rating as Double // 1
ratingDouble = Double(rating) // 2
ratingDouble = rating.doubleValue // 3
- Il primo elemento sfrutta
Objective-C
ponte che permette AnyObject
e NSNumber
ad essere lanciato come Double|Float|Int|UInt|Bool
.
- Il secondo elemento attraversa presumibilmente un costruttore con la firma
init(_ number: NSNumber)
. Non sono riuscito a trovarlo nel modulo o nei documenti ma passando il AnyObject
nel generato un errore che non può essere implicitamente downcast a NSNumber
quindi deve essere lì e non solo il bridging.
- Il terzo elemento non utilizza le funzionalità del linguaggio nello stesso modo. Si avvantaggia solo del fatto che
doubleValue
restituisce un Double
.
Uno dei vantaggi di 1 è che funziona anche per AnyObject
modo che il codice potrebbe essere:
let ratingDouble = self.prodResult!.prodsInfo.prodList[indexPath.row].avgRating! as Double
Si noti che ho rimosso il ?
dalla vostra funzione e spostato la !
in Ogni volta che si utilizza.! stai evitando la sicurezza di ?
quindi non c'è motivo di fare entrambe le cose insieme.
fonte
2014-12-03 18:55:28
fa ratingDouble = voto non funziona? Swift dovrebbe supportare il collegamento tra i due. –
In tal caso: errore: "NSNumber" non è convertibile in "Double". Ma posso farlo: ratingDouble = rating.doubleValue –