swift Class的构造函数

1.构造函数类似于OC中的初始化方法:init方法
2.构造函数有两种:一种是指定构造器(Designated Initializer),另一种是便利构造器(Convenience Initializer)。
3.构造函数的使用: 类的属性必须有值,如果不是在定义时初始化,可以在构造函数中赋值


image.png

报错内容:name和kind没有初始值

正确写法之一:在构造函数里面对属性赋值
  class Pet {
     var name:String
     var kind:String
      // 在指定构造器中给成员变量赋值
     init(name:String,kind:String) {
          self.name = name
          self.kind = kind
    }
 }
//创建一个pet对象
 let pet = Pet(name: "老七", kind: "法斗")
正确写法之二:在定义类时候,直接给属性赋初始值
class Pet {
    var name:String = "小花"
    var kind:String = "泰迪"
    init(name:String,kind:String) {
   }
 }

写法二如果不自定义init函数也不会报错

   class Pet {
     var name:String = "小花"
     var kind:String = "泰迪"
   }
 调用了Pet自动生成的默认指定构造器(无参数)
 let pet = Pet()
 print(pet.name)

所以说,Swift的指定构造器本质是,确保本类的成员变量一定要被赋值,不是说一定要通过指定构造器来赋值。这个从上面改动的例子中可以看出(默认构造器并没有给成员变量赋值)。

  1. 当某个类有父类时,在其指定构造器中必须调用父类的指定构造器,且在调用父类的指定构造器前,必须得确保这个类的成员变量必须得有值。
    正确写法:

       class Dog: Pet {
          var foodName = "馒头"
          var color:UIColor
          init(name: String, kind: String, color:UIColor) {
            self.color=color
            super.init(name: name, kind: kind)
           }
        } 
    

错误写法:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。