ho a che fare con diverse unità, vale a dire distance
, altitude
, speed
, volume
, eccdell'estensione alias in rapida
Il mio obiettivo è quello di avere un modo unico elegante per formattarli in app, come ad esempio chiamando myValue.formatted
:
let mySpeed: Speed = 180
println(mySpeed.formatted) // 5.0 km/h
let myAltitude: Altitude = 4000
println(myAltitude.formatted) // 4000 m
ho pensato che questo era un buon caso per l'utilizzo di tipo alias.
typealias Distance = Float
typealias Altitude = Float
typealias Speed = Float
Per la proprietà formatted
, ho provato con una extension
del tipo Float
:
extension Float {
var formatted: String {
get {
switch self {
case is Altitude:
return "\(self) m"
case is Speed:
return "\(self * 3.6) km/h"
default:
return "\(self)"
}
}
}
}
Ma il compilatore dice che il mio case
blocchi sono sempre true
.
Poi ho cercato di estendere il tipo singolo:
extension Speed {
var formatted: String {
return "\(self * 3.6) km/h"
}
}
extension Altitude {
var formatted: String {
return "\(self) m"
}
}
il compilatore ora afferma chiaramente ridichiarazione non valido di 'formattato'
OK, è chiaro ora come funzionano tipo alias. Ma come potrei ottenere la mia proprietà .formatted
per diversi tipi di Float in swift?
Questo è davvero molto interessante. È un po 'deludente non posso lanciare un 'floatVar come Speed', cioè usando la parola chiave' as'. Il tipo alias era elegante in questo modo. – gpbl
@crumblenaut hai ragione. La velocità ora non è 'Float'. È un tipo personalizzato definito dall'utente.Puoi 'format'' Float' con una funzione con un solo tipo. Se vuoi veramente farlo usa 'formatSpeed', formatDistance in extensions. – codester