博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数
阅读量:7013 次
发布时间:2019-06-28

本文共 3127 字,大约阅读时间需要 10 分钟。

对象属性:

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 button23     }()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 per12     }()13     14     // 私有化构造函数,外界不可以通过《Person()》创建对象,只能访问单例对象15     private override init() {16         super.init()17     }18 }

 

转载于:https://www.cnblogs.com/panda1024/p/6216495.html

你可能感兴趣的文章