<<Swift 巩固笔记>> 第1篇 基础部分

188 阅读3分钟

前言

来掘金这么长时间一直在沸点摸鱼, 说来惭愧, 决定痛改前非, 重新拾起被我扔了老长时间的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)