类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数

Posted 小课桌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数相关的知识,希望对你有一定的参考价值。

对象属性:

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 }

 

以上是关于类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数的主要内容,如果未能解决你的问题,请参考以下文章

java面向对象

类与对象

Spring_懒加载与非懒加载

私有化的标记方法

私有化

Mybatis学习第25节 -- 懒加载 积极与不积极