前言
来掘金这么长时间一直在沸点摸鱼, 说来惭愧, 决定痛改前非, 重新拾起被我扔了老长时间的Swift, 这就是为了打卡, 来证明我看过这部分内容了, 大家不要批评我划水哈!
好玩的地方
1. 在语句尾可以省略分号
2. 多行注释可以嵌套
3. 可以用任意字符作为变量名或者常量名
4. 元组的出现
5. 可选类型的出现
声明变量和常量
// let声明常量let maxCount = 10
// var声明变量var currentCount = 0
// 在一行中声明多个变量, 当然也可以声明多个常量
var x = 0, y = 0, z = 0
类型标注 (type annotation)
// 常量或变量中存储值的类型
var welcomeMessage: String
welcomeMessage = "Hello, world!"
// 声明多个变量时, 在最后一个变量后添加类型标注
var red, green, blue: Double输出函数
// 输出函数
print(welcomeMessage)
// 字符串插值方式输出
print("string content is \(welcomeMessage)")类型安全和类型推断 (type safe)
// 当我们没有给出类型标注时, 编译器根据所赋值数据, 推断变量类型
// count 为 int 类型
var count = 10
// pi 为 double 类型
let pi = 3.14布尔类型 (Bool)
// 只有 true false 两种取值
let areYouBeautiful = true
let areYouhungry = false元组 (tuple)
// 一个类型为(Int, String)的元组
let error = (404, "Not Found")
print(error)
// 将元组的内容分解
let (errorCode, errorMessage) = error
print("code is \(errorCode), message is \(errorMessage)")
// 如果我们不需要某个具体数据, 用 _ 代替
let (errCode, _) = error
print("code is \(errCode)")
// 利用下标访问元组内容
print("code is \(error.0), message is \(error.1)")
// 在定义元组时, 给元素命名, 便于访问
let success = (code: 200, message: "OK")
print("code is \(success.code), message is \(success.message)")可选类型 (optionals)
// 为了处理值可能缺失的情况
let possibleNumber = "123"
// 将String类型转换为Int类型, 返回值为Int?, 也就是可选类型
// 因为如果possibleNumber值为"123", 则可以成功转换, 如果为"hello", 则转换失败, 所以返回值为可选类型Int?
let convertedNumber = Int(possibleNumber)
if convertedNumber != nil {
// 当不等于nil, 说明有值, 这里我们可以使用!来获取值
// 可选值的强制解析(force unwrapping)
// 注意: 使用!来获取一个不存在的值, 会导致错误. 一定要保证可选有一个非nil的值
print("converted success \(convertedNumber!)")
} else {
print("converted failed")
}
// 如果没有给可选变量或者常量赋值, 自动赋值为nil
var answer: String?
// 注意: 在swift中, nil是一个确定的值. 任何类型的可选状态都可以设置成为nil可选绑定 (optional binding)
if let actualNumber = convertedNumber {
// 因为actualNumber被初始化过, 所以不用加!
print("has value \(actualNumber)")
} else {
print("no value")
}隐式解析可选类型 (implicitly unwrapped optionals)
// 隐式解析可选类型, 可以当做自动解析的可选类型
let possibleString: String? = "optional string"
let forcedString: String = possibleString!
print(forcedString)
// 在第一次赋值之后, 可以确定之后总是有值, 这种状态称之为隐式解析可选类型
let assumedString: String! = "implicitly string"
let implicitString: String = assumedString
print(implicitString)