这是我参与「第四届青训营 」笔记创作活动的的第12天
Swift 入门与实践| 青训营笔记
整体使用下来,感觉swift语法还是有一些麻烦的地方,但相比OC来说肯定是更加现代的语言了,在swift UI编译中,也能够感受到swift速度的优势,对于日常修改UI来说能够更加高效的进行开发和验证,以下是swift的基础语法的总结。
Swift vs. OC
- 安全性:
- nil值: 可选Optional,不会分配任何内存空间,避免崩溃
- 类型安全:必须显示转换
- 速度:
- 编译型语言,比OC和Python快
Swift基础知识
变量
- 可变类型:var
- 不可变类型:let`
// 可变变量
var name: String = "Howard"
// 不可变变量
let age: Int = 25
// 类型推断
var name = "Howard"
let age = 25
数据类型
基本数据类型
- 整数类型 Int :-2147483648~2147483647
- 在32位平台上,Int和Int32长度相同
- 在64位平台上,Int和Int64长度相同 除非你需要特定长度的整数,一般来说使用Int足够了,Int表示的范围可达到,大多数已经足够了
- 无符号整数类型 UInt
- 在32位平台上,UInt与UInt32长度类型相同
- 在64位平台上,UInt与UInt64长度类型相同
- 浮点数:Float、Double
- Double:表示64位浮点数。
- Float:表示32位浮点数。
- 布尔值:Bool
- true
- false
- 字符 Character:单个字母
- 字符串 String:字符的集合
- 可选类型 Optional:nil
其他数据类型
- 数组:
- 同一类型
- 有序
- 字典:
- 无序
- 每一个值对应唯一的键
- 合集:
- 同一类型
- 不重复
- 无序
// 数组
var names: [String] = ["A", "B", "A"]
// 字典
var classes: [String: [String]] = [
"class A": ["A1", "A2"],
"class B": ["B1", "B2"],
]
// 合集
var id: Set<String> = ["1", "2", "2", "3"]
print(id) // 1, 2, 3
可选值Optional: nil
let name: String?
name = "Howard" //如果没有这句赋值,后面将不会打印
if let name = name as ? String {
print(name)
}
函数
函数定义和调用
// 定义
func sayHi1(person: String) -> String { let greeting = "Hello, " + person + "!" return greeting }
func sayHi2(_ person: String) -> String { let greeting = "Hello, " + person + "!" return greeting }
// 调用
print(sayHi1(person: "Howard"))
print(sayHi2("Howard"))
inout引用传递
func swapDouble(_ a: inout Double, _ b: inout Double) {
let temporaryA = a a = b b = temporaryA
}
var a = 8.0
var b = 7.0
swapDouble(&a, &b)
print(a) // 7.0
print(b) // 8.0
类:类是引用类型
类的定义、调用与访问
// 定义
class SomeClass {
var name: String
init(name: String) {
self.name = name
}
// 如果变量已经赋值,无需初始化语法
// var name: String = ""
}
// 实例化
let someClass = SomeClass(name: "Howard")
// let someClass = SomeClass()
// 访问属性
print(someClass.name)
类的拓展
拓展:为原有类添加功能、计算属性和方法
- 添加计算实例属性和计算类型属性
- 定义实例方法和类型方法
- 提供新初始化器
extension SomeClass {
// 提供新初始化器
init(){}
// 计算实例属性
var greet: String { return name + "say Hi" }
// 定义实例方法
func greeting->Void { print(self.greet) }
}