對象屬性: 1、private修飾的屬性:只能在本類內部訪問,分類和外部都不能訪問(徹底私有) 2、fileprivate修飾的屬性:在本類和分類中可以訪問,外部不能訪問(部分私有) 3、直接用let或var修飾的屬性:在本類、分類和外部都可以訪問(開放) 4、在分類中只能聲明計算屬性,不能聲明存儲 ...
對象屬性:
1、private修飾的屬性:只能在本類內部訪問,分類和外部都不能訪問(徹底私有)
2、fileprivate修飾的屬性:在本類和分類中可以訪問,外部不能訪問(部分私有)
3、直接用let或var修飾的屬性:在本類、分類和外部都可以訪問(開放)
4、在分類中只能聲明計算屬性,不能聲明存儲屬性
1 // 屬性:可以被外界訪問 2 var name:String? 3 4 // private修飾的屬性:只能在本類內部訪問,分類和外部都不能訪問 5 private var age:String? 6 7 // fileprivate修飾的屬性:在本類和分類中可以訪問,外部不能訪問 8 fileprivate var gender:String?
1 import UIKit 2 3 class Person: NSObject { 4 5 } 6 7 extension Person{ 8 9 // 分類中只能聲明計算屬性,不能聲明存儲屬性 10 var desc:String{ 11 return "我是小明" 12 } 13 }
類屬性:
1、在本類中使用class修飾的屬性,調用時《類名.屬性名》
2、在分類中使用static修飾的屬性(註意:分類中只能定義計算屬性,不能定義存儲屬性),調用時《類名.屬性名》
1 // class修飾本類屬性:通過《類名.屬性名》進行訪問 2 class var classAttribute:String{ 3 return "I'm the classAttribute." 4 } 5 6 // static修飾分類中計算屬性:通過《類名.屬性名》進行訪問 7 static var staticAttribute:String{ 8 return "I'm the staticAttribute." 9 }
對象方法:
1、直接用func修飾,本類、分類、外界都可以調用(開放)
2、用private修飾,只有在本類中可以調用(徹底私有)
3、用fileprivate修飾,在本類、分類中可以訪問,外部不能訪問(部分私有)
1 // 直接用func的方法,本類、分類、外界都可以調用 2 func sayHi() -> Void { 3 4 } 5 // 只有在本類中可以調用 6 private func sayHi3(){ 7 8 } 9 // 只有在本類、分類中調用 10 fileprivate func sayHi2() -> (){ 11 12 }
類方法:
1、在本類中使用class修飾類方法
2、在分類中使用static修飾類方法
1 class Person: NSObject { 2 3 // 在本類中,類方法用class修飾 4 class func sayHi() -> (){ 5 print("Hello world,I'm the class method.") 6 } 7 } 8 9 // extension 相當於OC 中的分類 10 extension Person{ 11 12 // 在分類中,類方法用static修飾 13 static func sayHello() -> Void{ 14 print("Hello world,I'm the static method.") 15 } 16 }
懶載入與私有事件:
懶載入的關鍵字用lazy修飾,有三種創建方法
用private修飾的事件,要想添加給按鈕,前面必須用@objc修飾
1 import UIKit 2 3 class Person: NSObject { 4 5 // 懶載入方式一:直接創建 6 private lazy var msgLabel = UILabel() 7 8 // 懶載入方式二:使用對象方法創建,方法名前要加self 9 private lazy var content:String = self.createContent() 10 11 // 懶載入方式三:使用閉包創建 12 // swift懶載入用lazy修飾,代碼只執行一次,哪怕對象nil了,也不會再次執行 13 // OC中的懶載入是重寫get方法,當對象為nil時,會重新載入 14 // swift中懶載入使用閉包方式時,閉包可以省略 () in ,直接返回對象即可 15 private lazy var button:UIButton = { 16 let button = UIButton() 17 18 // swift中使用#selector給按鈕添加事件,註意帶參數寫法(btn:) 19 // OC中使用@selector給按鈕添加事件 20 button.addTarget(self, action: #selector(buttonAction(btn:)), for: .touchUpInside) 21 22 return button 23 }() 24 25 26 // private修飾的事件函數,在Swift運行迴圈裡面找不到 27 // 解決方法:使用oc,基於運行時使用kvc動態派發調用該事件,@objc告訴編譯器使用oc的機制去調用這個事件 28 @objc private func buttonAction(btn:UIButton){ 29 30 } 31 32 func createContent() -> String{ 33 return "創建的內容" 34 } 35 }
單例:用static修飾
私有化構造函數,外部不可以通過《類名()》創建對象,只能訪問單例,更嚴謹
1 import UIKit 2 3 class Person: NSObject { 4 5 // 單例對象,用static修飾 6 static let currentPerson:Person = Person() 7 8 // 使用閉包方式創建單例對象 9 static let sharedPerson:Person = { 10 let per = Person() 11 return per 12 }() 13 14 // 私有化構造函數,外界不可以通過《Person()》創建對象,只能訪問單例對象 15 private override init() { 16 super.init() 17 } 18 }