ios - Extending type aliases in swift -
i dealing different units, i.e. distance
, altitude
, speed
, volume
, etc.
my goal have elegant, unique way format them in app, illustration calling myvalue.formatted
:
let myspeed: speed = 180 println(myspeed.formatted) // 5.0 km/h allow myaltitude: height = 4000 println(myaltitude.formatted) // 4000 m
i thought case using type aliases.
typealias distance = float typealias height = float typealias speed = float
for formatted
property, tried extension
of type float
:
extension float { var formatted: string { { switch self { case altitude: homecoming "\(self) m" case speed: homecoming "\(self * 3.6) km/h" default: homecoming "\(self)" } } } }
but compiler says case
blocks true
.
then tried extend single type:
extension speed { var formatted: string { homecoming "\(self * 3.6) km/h" } } extension height { var formatted: string { homecoming "\(self) m" } }
the compiler states invalid redeclaration of 'formatted'
ok, it's clear how type aliases work. how .formatted
property different types of floats in swift?
typealias
alter or rename type.it not create user type you.you extending float
speed
,altitude
again.
you can pass 180
custom struct conforming literals
types.
let myspeed: speed = 180
floatliteralconvertible
, integerliteralconvertible
give same functionality want , can straight assign values custom struct types
assign float
struct speed: floatliteralconvertible,integerliteralconvertible { var distance:float init(floatliteral value: float) { distance = value } init(integerliteral value: int){ distance = float(value) } var formatted: string { homecoming "\(distance * 3.6) km/h" } } allow myspeed: speed = 180.0 println(myspeed.formatted) // 5.0 km/h
ios swift
No comments:
Post a Comment