1.private修飾符
只允許在當前類中調(diào)用
同一個文件中不同類之間不能訪問
比如一個.swift文件中定義了A和B兩個類,A類中定義了一個private修飾的屬性height,那么B類中的a對象是不能調(diào)用他的private屬性的
private現(xiàn)在變?yōu)榱苏嬲乃接性L問控制
用private修飾的方法不可以被代碼域之外的地方訪問
2.filePrivate修飾符
filePrivate
其修飾的屬性或者方法只能在當前的swift源文件中訪問(包括extension,包括不同類之間)
即在同一個文件中,所有的fileprivate方法屬性都是可以訪問到的
3.public修飾符
修飾的屬性和方法可以在其他作用域被訪問
但是不能在重載override中被訪問
也不能在繼承方法中的extension中訪問
4.open修飾符
修飾的屬性或者方法可以在其他作用域被訪問
修飾的屬性或者方法可以在其他作用域被繼承或重載override
5.internal修飾符
默認的訪問級別可寫可不寫
internal訪問級別所修飾的屬性和方法在源代碼所在的整個模塊都可以訪問
如果是框架或者庫代碼,則在整個框架內(nèi)部是可以訪問的,框架由外部代碼所引用時,則不可以訪問
如果是app代碼,也就是整個app的代碼,也是整個app內(nèi)部可以訪問
從高到底的順序排序
open
>public
>internal
>fileprivate
>private
6. discardableResult
@discardableResult
取消如果不用返回值的警告
7.final
final
加到方法前邊則是防止重寫,加到類前邊則不能繼承
8. convenience
convenience
遍歷構(gòu)造器
類的構(gòu)造過程有一下幾個規(guī)則
- 指定構(gòu)造器必須調(diào)用其直接父類的指定構(gòu)造器
- 遍歷構(gòu)造器必須調(diào)用同一類中其他的指定構(gòu)造器
- 遍歷構(gòu)造器必須以調(diào)用某一個指定構(gòu)造器結(jié)束
一個更方便記憶的方法是:
- 指定構(gòu)造器必須總是向上代理
-
便利構(gòu)造器必須總是橫向代理
圖解說明
9.lazy
lazy
懶加載,oc
中實利用get
方法實現(xiàn),swift
利用閉包實現(xiàn).比如
private lazy var navLeftButton = { () -> UIButton in
let btn = UIButton(type: .custom)
btn.frame = CGRect(x: 0, y: 0, width: 50, height: 30)
btn.setImage(UIImage(named:"back"), for: .normal)
btn.addTarget(self, action: #selector(self.back), for: .touchUpInside)
return btn
}()
10. mutating
mutating
一般情況下值類型的屬性不能在它的實例方法中被修改,如果真的想要改他的屬性,則在方法前邊加上mutating
,比如
struct Point {
var x = 0.0, y = 0.0
mutating func moveByX(deltaX: Double, y deltaY: Double) {
x += deltaX
y += deltaY
}
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveByX(2.0, y: 3.0)
static 和 class
static
和class
修飾方法都可以聲明一個靜態(tài)方法,不同的是calss
修飾的可以被重寫,而static
不可以,swift
中結(jié)構(gòu)體枚舉也可以定義方法和協(xié)議的,都屬于值類型,而值類型的必須用static
修飾