1.private修飾符
只允許在當前類中調用
同一個文件中不同類之間不能訪問
比如一個.swift文件中定義了A和B兩個類,A類中定義了一個private修飾的屬性height,那么B類中的a對象是不能調用他的private屬性的
private現在變為了真正的私有訪問控制
用private修飾的方法不可以被代碼域之外的地方訪問
2.filePrivate修飾符
filePrivate
其修飾的屬性或者方法只能在當前的swift源文件中訪問(包括extension,包括不同類之間)
即在同一個文件中,所有的fileprivate方法屬性都是可以訪問到的
3.public修飾符
修飾的屬性和方法可以在其他作用域被訪問
但是不能在重載override中被訪問
也不能在繼承方法中的extension中訪問
4.open修飾符
修飾的屬性或者方法可以在其他作用域被訪問
修飾的屬性或者方法可以在其他作用域被繼承或重載override
5.internal修飾符
默認的訪問級別可寫可不寫
internal訪問級別所修飾的屬性和方法在源代碼所在的整個模塊都可以訪問
如果是框架或者庫代碼,則在整個框架內部是可以訪問的,框架由外部代碼所引用時,則不可以訪問
如果是app代碼,也就是整個app的代碼,也是整個app內部可以訪問
從高到底的順序排序
open
>public
>internal
>fileprivate
>private
6. discardableResult
@discardableResult
取消如果不用返回值的警告
7.final
final
加到方法前邊則是防止重寫,加到類前邊則不能繼承
8. convenience
convenience
遍歷構造器
類的構造過程有一下幾個規則
- 指定構造器必須調用其直接父類的指定構造器
- 遍歷構造器必須調用同一類中其他的指定構造器
- 遍歷構造器必須以調用某一個指定構造器結束
一個更方便記憶的方法是:
- 指定構造器必須總是向上代理
-
便利構造器必須總是橫向代理
圖解說明
9.lazy
lazy
懶加載,oc
中實利用get
方法實現,swift
利用閉包實現.比如
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
修飾方法都可以聲明一個靜態方法,不同的是calss
修飾的可以被重寫,而static
不可以,swift
中結構體枚舉也可以定義方法和協議的,都屬于值類型,而值類型的必須用static
修飾