码迷,mamicode.com
首页 > 编程语言 > 详细

Swift-初始化

时间:2018-02-22 21:32:27      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:override   size   初始化顺序   强制   调用   pre   init   方法   赋值   

  • 子类初始化顺序
  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-初始化

标签:override   size   初始化顺序   强制   调用   pre   init   方法   赋值   

原文地址:https://www.cnblogs.com/HackHer/p/8459699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!