04_Swift2基础之类型安全和类型推测+字面量+类型别名

本文介绍了Swift中的类型安全特性,解释了如何利用类型推测简化编程,以及数值型字面量的用法,包括整数、浮点数的表示和类型别名的应用。
1. 类型安全和类型推测

 1> 类型安全  

  Swift 是一个 _类型安全(type safe)_ 的语言。类型安全的语言可以让你清楚地知道代码要处理的值的类型。如果你的代码需要一个`String`,你绝对不可能不小心传进去一个`Int`。

  由于 Swift 是类型安全的,所以它会在编译你的代码时进行 _类型检查(type checks)_ ,并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误

  当你要处理不同类型的值时,类型检查可以帮你避免错误。然而,这并不是说你每次声明常量和变量的时候都需要显式指定类型。

 2> 类型推测

  如果你没有显式指定类型,Swift 会使用 _类型推测(type inference)_ 来选择合适的类型。有了类型推测,编译器可以在编译代码的时候自动推测出表达式的类型。原理很简单,只要检查你赋的值即可。

  因为有类型推测,和 C 或者 Objective-C 比起来 Swift 很少需要声明类型。常量和变量虽然需要明确类型,但是大部分工作并不需要你自己来完成。

  当你声明常量或者变量并赋初值的时候类型推测非常有用。当你在声明常量或者变量的时候赋给它们一个_字面量(literal value 或 literal)_ 即可触发类型推测。(字面量就是会直接出现在你代码中的值,比如`42`和`3.14159`。)

  ① 如果你给一个新常量赋值`42`并且没有标明类型,Swift 可以推测出常量类型是`Int`,因为你给它赋的初始值看起来像一个整数:

   let meaningOfLife = 42

       // meaningOfLife 会被推测为 Int 类型

  ② 如果你没有给浮点字面量标明类型,Swift 会推测你想要的是`Double`:

     let pi = 3.14159

       // pi 会被推测为 Double 类型

   当推测浮点数的类型时,Swift 总是会选择`Double`而不是`Float`。

  ③ 如果表达式中同时出现了整数和浮点数,会被推测为`Double`类型:

   let anotherPi = 3 + 0.14159

   // anotherPi 会被推测为 Double 类型

   原始值`3`没有显式声明类型,而表达式中出现了一个浮点字面量,所以表达式会被推测为`Double`类型。

2. 数值型字面量

 1> 整数字面量可以被写作:

  * 一个十进制数(decimal),没有前缀

  * 一个二进制数(binary),前缀是`0b`

  * 一个八进制数(octal),前缀是`0o`

  * 一个十六进制数(hexadecimal),前缀是`0x`

  例: 下面的所有整数字面量的十进制值都是`17`:

1   let decimalInteger = 17
2 
3   let binaryInteger = 0b10001       // 二进制的17
4 
5   let octalInteger = 0o21           // 八进制的17
6 
7   let hexadecimalInteger = 0x11     // 十六进制的17

 

 2> 浮点数字面量

  ① 浮点字面量可以是十进制(没有前缀)或者是十六进制(前缀是`0x`)。小数点两边必须有至少一个十进制数字(或者是十六进制的数字)。

  ② 浮点字面量还有一个可选的 _指数(exponent)_ ,在十进制浮点数中通过大写或者小写的`e`来指定,在十六进制浮点数中通过大写或者小写的`p`来指定。

   如果一个十进制数的指数为`exp`,那这个数相当于 基数和$10^{exp}$的乘积

    * `1.25e2` 表示 $1.25 × 10^{2}$,等于 `125.0`。

    * `1.25e-2` 表示 $1.25 × 10^{-2}$,等于 `0.0125`。

   如果一个十六进制数的指数为`exp`,那这个数相当于 基数和$2^{exp}$的乘积

    * `0xFp2` 表示 $15 × 2^{2}$,等于 `60.0`。

    * `0xFp-2` 表示 $15 × 2^{-2}$,等于 `3.75`。

   例: 下面的这些浮点字面量都等于十进制的`12.1875`:

      let decimalDouble = 12.1875

      let exponentDouble = 1.21875e1

      let hexadecimalDouble = 0xC.3p0

 3> 额外的格式

  数值类字面量可以包括额外的格式增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,并不会影响字面量:

   let paddedDouble = 000123.456

   let oneMillion = 1_000_000

   let justOverOneMillion = 1_000_000.000_000_1

3. 类型别名

 _类型别名(type aliases)_ 就是给现有类型定义另一个名字。你可以使用`typealias`关键字来定义类型别名。

 当你想要给现有类型起一个更有意义的名字时,类型别名非常有用。假设你正在处理特定长度的外部资源的数据:

  typealias AudioSample = UInt16

 定义了一个类型别名之后,你可以在任何使用原始名的地方使用别名:

  var maxAmplitudeFound = AudioSample.min

  // maxAmplitudeFound 现在是 0

  本例中,`AudioSample`被定义为`UInt16`的一个别名。因为它是别名,`AudioSample.min`实际上是`UInt16.min`,所以会给`maxAmplitudeFound`赋一个初值`0`。

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值