苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

分布式系统框架(V1.3) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper万能框架(V2.3) HttpHelper官方出品,无敌框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V1.9) 最牛的爬虫类,没有爬不到只有想不到 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 100|回复: 1

[Swift] 【Swift基础教程】扩展之计算型属性

[复制链接]
发表于 2019-1-30 17:56:05 | 显示全部楼层 |阅读模式


   导读

【Swift基础教程】目录   http://www.sufeinet.com/thread-24641-1-1.html


计算型属性

扩展可以为已有类型添加计算型实例属性和计算型类型属性。下面的例子为 Swift 的内建 Double 类型添加了五个计算型实例属性,从而提供与距离单位协作的基本支持:

extension Double {
    var km: Double { return self * 1_000.0 }
    var m : Double { return self }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1_000.0 }
    var ft: Double { return self / 3.28084 }
}
let oneInch = 25.4.mm
print("One inch is \(oneInch) meters")
// 打印 “One inch is 0.0254 meters”

let threeFeet = 3.ft
print("Three feet is \(threeFeet) meters")
// 打印 “Three feet is 0.914399970739201 meters”

这些计算型属性表达的含义是把一个 Double 值看作是某单位下的长度值。即使它们被实现为计算型属性,但这些属性的名字仍可紧接一个浮点型字面值,从而通过点语法来使用,并以此实现距离转换。

在上述例子中,Double 值 1.0 用来表示“1米”。这就是为什么计算型属性 m 返回 self,即表达式 1.m 被认为是计算 Double 值 1.0。

其它单位则需要一些单位换算。一千米等于 1,000 米,所以计算型属性 km 要把值乘以 1_000.00 来实现千米到米的单位换算。类似地,一米有 3.28024 英尺,所以计算型属性 ft 要把对应的 Double 值除以 3.28024 来实现英尺到米的单位换算。

这些属性是只读的计算型属性,为了更简洁,省略了 get 关键字。它们的返回值是 Double,而且可以用于所有接受 Double 值的数学计算中:

let aMarathon = 42.km + 195.m
print("A marathon is \(aMarathon) meters long")
// 打印 “A marathon is 42195.0 meters long”

注意
扩展可以添加新的计算型属性,但是不可以添加存储型属性,也不可以为已有属性添加属性观察器。


发表于 2019-1-30 22:27:25 | 显示全部楼层
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备17001017号-1 )

GMT+8, 2019-2-16 23:20

© 2017-2018

快速回复 返回顶部 返回列表