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 }
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 }