Swift学习笔记(2)

16 篇文章 0 订阅

划重点:元组(第7点),可选类型(第8点)

1.数值型字面量

(1)整数字面量可以被写作:
• 一个十进制数,没有前缀
• 一个二进制数,前缀是0b
• 一个八进制数,前缀是0o
• 一个十六进制数,前缀是0x
(2)浮点字面量可以是十进制(没有前缀)或者是十六进制(前缀是 0x )
十进制:1.25e2 表示 1.25 × 10^2,等于 125.0
十六进制:0xFp2 表示 15 × 2^2,等于 60.0
(3)数值类字面量可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,并不会影响字面量:

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1

2.数值型类型转换

通常来讲,即使代码中的整数常量和变量已知非负,也请使用Int类型。总是使用默认的整数类型可以保证你的整数常量和变量可以直接被复用并且可以匹配整数类字面量的类型推断。

3. 整数转换

let twoThousand: UInt16 = 2_000
//twoThousand是UInt16类型
let one: UInt8 = 1
//常量one是UInt8类型
let twoThousandAndOne = twoThousand + UInt16(one)
// twoThousand和one不能直接相加,因为它们类型不同。所以要调用UInt16(one)来创建一个新的UInt16数字并用one的值来初始化。现在两个数字的类型都是 UInt16,可以进行相加。目标常量 twoThousandAndOne 的类型被推断为 UInt16,因为它是两个 UInt16 值的和。

在语言内部,UInt16 有一个构造器,可以接受一个UInt8类型的值,所以这个构造器可以用现有的 UInt8 来创建一个新的 UInt16。

4. 整数和浮点数转换

(1)整数和浮点数的转换必须显式指定类型:

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi 等于 3.14159,所以被推测为 Double 类型

常量 three 的值被用来创建一个 Double 类型的值,所以加号两边的数类型须相同。如果不进行转换,两者无法相加。
(2)浮点数到整数的反向转换同样行,整数类型可以用 Double 或者 Float 类型来初始化:

let integerPi = Int(pi)
// integerPi 等于 3,所以被推测为 Int 类型

当用这种方式来初始化一个新的整数值时,浮点值会被截断。也就是说 4.75 会变成 4,-3.9 会变成 -3。

5. 类型别名

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

typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound 现在是 0

6.布尔值

Swift 有一个基本的布尔(Boolean)类型,叫做Bool。Swift 有两个布尔常量,true 和 false。

7.元组

元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。
可以将一个元组的内容分解(decompose)成单独的常量和变量,然后你就可以正常使用它们了:

let http404Error = (404, "Not Found")
// http404Error 的类型是 (Int, String),值是 (404, "Not Found")
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// 输出 "The status code is 404"
print("The status message is \(statusMessage)")
// 输出 "The status message is Not Found"

如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线(_)标记:

let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// 输出 "The status code is 404"

通过下标来访问元组中的单个元素,下标从零开始:

print("The status code is \(http404Error.0)")
// 输出 "The status code is 404"
print("The status message is \(http404Error.1)")
// 输出 "The status message is Not Found"

你可以在定义元组的时候给单个元素命名:

let http200Status = (statusCode: 200, description: "OK")

给元组中的元素命名后,你可以通过名字来获取这些元素的值:

print("The status code is \(http200Status.statusCode)")
// 输出 "The status code is 200"
print("The status message is \(http200Status.description)")
// 输出 "The status message is OK"

8.可选类型

使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示:“有值,等于 x”或“没有值”。
Swift 的 Int 类型有一种构造器,作用是将一个 String 值转换成一个 Int 值。然而,并不是所有的字符串都可以转换成一个整数。字符串 “123” 可以被转换成数字 123 ,但是字符串 “hello, world” 不行。
下面的例子使用这种构造器来尝试将一个 String 转换成 Int:

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"

因为该构造器可能会失败,所以它返回一个可选类型(optional)Int,而不是一个 Int。一个可选的 Int 被写作 Int?。(只能是 Int 或者什么都没有

9.nil

(1)可以给可选变量赋值为nil来表示它没有值.
nil不能用于非可选的常量和变量。如果你的代码中有常量或者变量需要处理值缺失的情况,请把它们声明成对应的可选类型。
(2)如果你声明一个可选常量或者变量但是没有赋值,它们会自动被设置为 nil。
注意: Objective-C 中,nil 是一个指向不存在对象的指针。Swift 中,nil 不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选状态都可以被设置为 nil,不只是对象类型。

10. if 语句以及强制解析

当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的强制解析(forced unwrapping)。
注:
使用 ! 来获取一个不存在的可选值会导致运行时错误。使用 ! 来强制解析值之前,一定要确定可选包含一个非 nil 的值。

if convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber!).")
}
// 输出 "convertedNumber has an integer value of 123."
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值