我的目标是在应用程序中使用一种优雅,独特的方式来格式化它们,例如调用myValue.formatted:
let mySpeed: Speed = 180println(mySpeed.formatted) // 5.0 km/hlet myAltitude: Altitude = 4000println(myAltitude.formatted) // 4000 m
typealias distance = floattypealias Altitude = floattypealias Speed = float
对于格式化的属性,我尝试使用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)" } } }}
但是编译器说我的case块总是正确的.
然后我试图扩展单一类型:
extension Speed { var formatted: String { return "\(self * 3.6) km/h" }}extension Altitude { var formatted: String { return "\(self) m" }}
编译器现在明确说明’格式化’的重新声明无效
好的,现在很清楚类型别名是如何工作的.但是如何在swift中为不同类型的floats获取我的.formatted属性?
解决方法 typealias只是更改或重命名类型.它不会为您创建其他用户类型.你实际上是再次扩展float for Speed,Altitude.您可以通过符合literals类型将180传递给您的自定义结构.
let mySpeed: Speed = 180
floatliteralConvertible和IntegerliteralConvertible将为您提供所需的相同功能,您可以在分配给float时直接为自定义结构类型赋值
struct Speed: floatliteralConvertible,IntegerliteralConvertible { var distance:float init(floatliteral value: float) { distance = value } init(integerliteral value: Int){ distance = float(value) } var formatted: String { return "\(distance * 3.6) km/h" }}let mySpeed: Speed = 180.0println(mySpeed.formatted) // 5.0 km/h总结
以上是内存溢出为你收集整理的ios – 在swift中扩展类型别名全部内容,希望文章能够帮你解决ios – 在swift中扩展类型别名所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)