zoukankan      html  css  js  c++  java
  • 类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数

    对象属性:

    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 }

     

  • 相关阅读:
    欠拟合与过拟合概念和局部加权回归
    ActionEvent之TextField
    事件模型的介绍与Button的ActionListener
    布局管理器
    GUI初步和frame&panel
    生产者消费者问题
    线程同步
    [BZOJ 1407] Savage
    [BZOJ 1145] 图腾totem
    [BZOJ 1150] 数据备份
  • 原文地址:https://www.cnblogs.com/panda1024/p/6216495.html
Copyright © 2011-2022 走看看