swift 訪問控制關鍵字private ,fileprivate,public,open

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遍歷構造器
類的構造過程有一下幾個規則

  1. 指定構造器必須調用其直接父類的指定構造器
  2. 遍歷構造器必須調用同一類中其他的指定構造器
  3. 遍歷構造器必須以調用某一個指定構造器結束

一個更方便記憶的方法是:

  • 指定構造器必須總是向上代理
  • 便利構造器必須總是橫向代理


    圖解說明
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

staticclass修飾方法都可以聲明一個靜態方法,不同的是calss修飾的可以被重寫,而static不可以,swift中結構體枚舉也可以定義方法和協議的,都屬于值類型,而值類型的必須用static修飾

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容