- 作者: Liwx
- 邮箱: 1032282633@qq.com
- 源码: 需要
源码
的同学, 可以在评论区
留下您的邮箱
iOS Swift 语法
底层原理
与内存管理
分析 专题:【iOS Swift5语法】00 - 汇编
01 - 基础语法
02 - 流程控制
03 - 函数
04 - 枚举
05 - 可选项
06 - 结构体和类
07 - 闭包
08 - 属性
09 - 方法
10 - 下标
11 - 继承
12 - 初始化器init
13 - 可选项
目录
- 01-方法(Method)
- 02-mutating
- 03-@discardableResult
01-方法(Method)
-
枚举
、结构体
、类
都可以定义实例方法、类型方法
-
实例方法
(Instance Method): 通过实例对象调用
-
类型方法
(Type Method): 通过类型调用
, 用static
或者class
关键字定义
-
class Car {
static var count = 0
init() {
Car.count += 1
}
static func getCount() -> Int {
// 以下几个等价
return count
// return Car.count
// return self.count // self类型方法中代表类型
// return Car.self.count
}
}
let c0 = Car()
let c1 = Car()
let c2 = Car()
print(Car.getCount()) // 3
-self
- 在
实例方法
中代表实例对象
- 在
类型方法
中代表类型
- 在类型方法
static func getCount
中- 类型存储属性
count
等价于self.count
、Car.self.count
、Car.count
- 类型存储属性
02-mutating
-
结构体
和枚举
是值类型
, 默认情况下,值类型的属性不能被自身的实例方法修改
- 在
func
关键字签加mutating
可以允许这种修改行为
- 在
- 结构体
mutating
使用
struct Point {
var x = 0.0, y = 0.0
mutating func moveBy(deltaX: Double, deltaY: Double) {
x += deltaX // 如果方法没有用mutating修饰 error: left side of mutating operator isn't mutable: 'self' is immutable
y += deltaY
// self = Point(x: x + deltaX, y: y + deltaY) // 本质也是修改x,y属性 error: cannot assign to value: 'self' is immutable
}
}
- 枚举
mutating
使用
enum StateSwitch {
case low, middle, high
mutating func next() { // mutating修饰枚举实例方法 实例方法内部才能修改属性
switch self {
case .low:
self = .middle
case .middle:
self = .high
case .high:
self = .low
}
}
}
var s = StateSwitch.low
print(s) // low
s.next()
print(s) // middle
s.next()
print(s) // high
s.next()
print(s) // low
03-@discardableResult
- 在
func
前面加个@discardableResult
, 可以消除
: 函数调用后返回值未被使用的警告
struct Point {
var x = 0.0, y = 0.0
@discardableResult mutating func moveX(deltaX: Double) -> Double {
x += deltaX
return x
}
}
var p = Point()
p.moveX(deltaX: 10) // 如果没有用 @discardableResult修饰: warning: Result of call to 'moveX(deltaX:)' is unused
iOS Swift 语法
底层原理
与内存管理
分析 专题:【iOS Swift5语法】