tôi đang đối phó với các đơn vị khác nhau, tức là distance
, altitude
, speed
, volume
vvMở rộng bí danh gõ nhanh chóng
Mục tiêu của tôi là phải có một phong cách độc đáo tao nhã để định dạng chúng trong ứng dụng, ví dụ như gọi số myValue.formatted
:
let mySpeed: Speed = 180
println(mySpeed.formatted) // 5.0 km/h
let myAltitude: Altitude = 4000
println(myAltitude.formatted) // 4000 m
Tôi nghĩ đây là trường hợp tốt để sử dụng bí danh loại.
typealias Distance = Float
typealias Altitude = Float
typealias Speed = Float
Đối với formatted
bất động sản, tôi đã cố gắng với một extension
loại 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)"
}
}
}
}
Nhưng trình biên dịch nói rằng case
khối của tôi là luôn true
.
Sau đó, tôi đã cố gắng để mở rộng các loại hình duy nhất:
extension Speed {
var formatted: String {
return "\(self * 3.6) km/h"
}
}
extension Altitude {
var formatted: String {
return "\(self) m"
}
}
trình biên dịch hiện nay nêu rõ khai báo lại không hợp lệ của 'định dạng'
OK, thì rõ ràng hiện nay như thế nào loại bí danh hoạt động. Nhưng làm thế nào tôi có thể nhận được tài sản .formatted
của mình cho các loại khác nhau của Floats nhanh chóng?
Điều này thực sự rất thú vị. Đó là một chút thất vọng tôi không thể cast một 'floatVar như Speed', tức là sử dụng từ khóa' as'. Bí danh kiểu được thanh lịch theo cách này. – gpbl
@crumblenaut bạn nói đúng. Tốc độ hiện không phải là 'Float'. Đây là loại tùy chỉnh do người dùng xác định.Bạn có thể 'định dạng'' Float' với một hàm bằng một loại.Nếu bạn thực sự muốn làm điều đó, hãy sử dụng 'định dạngSpeed', định dạngDistance trong phần mở rộng. – codester