Swift-初始化

Posted Shell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift-初始化相关的知识,希望对你有一定的参考价值。

  • 子类初始化顺序
  1. 子类自己需要初始化的参数
  2. 调用父类相应的初始化方法 super.init()
  3. 对父类中需要改变的成员进行设置

 

  • Designated, Convenience, Required
    • required init: 希望子类中一定实现的designated init,required强制子类重写init方法,可以保证父类的convenience init可以使用
    • class ClassA {
       ...
       required init(num:Int) {
         numA = num
       }
       ...  
      }
      
      class classB {
       ...
       required init(num:Int) {
         numB = num + 1
         super.init(num:num)
       }
       ..
      }

       

    • convenience init:
      • 必须调用同一个类中的designated init完成设置
      • 不能被子类重写
      • 不能在子类中用super的方法调用class ClassA {  let numA: Int  init(num: Int) {
      •       numA = num
          }
        
          convenience init(bigNum:Bool) {
              self.init(num:bigNum?10000:1)
            }
        
        }
        
        class ClassB:ClassA {
          let numB: Int
        
           override init(num:Int) {
              numB = num + 1
              super.init(num:num)
           }
        
        // 只要在子类中重写了父类的init方法,在子类中也可以使用父类的convenience init方法
        let objB = ClassB(bigNum: true)
        // objB.numA = 10000, objB.numB = 10001
        // ClassB.convenience init => num = 10000 => ClassB.init => numB = num + 1 = 10001 => ClassA.convenience init => num = 10000 => ClassA.init => numA = 10000

         

    • designated init: 在init里对let的实例常量进行赋值
      • class ClassA {
           let numA:Int
           init(num: Int) {
              numA = num  
          }        
        }
        
        class ClassB:ClassA {
          let numB:Int
          
          override init(num:Int) {
             numB = num + 1
             super.init(num:num)
          }  
        }

以上是关于Swift-初始化的主要内容,如果未能解决你的问题,请参考以下文章

swift 代码片段

如何将这个 Objective-C 代码片段写入 Swift?

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

swift 为什么我们有一个片段。我认为这有助于我们在另一个页面中有一个代码。

swift BaasBox和Swift的片段 - 第2部分