美文网首页ios
Swift对象的初始化

Swift对象的初始化

作者: lkkwxy | 来源:发表于2018-08-29 11:06 被阅读2次

Swift对象的初始化需要保证所有的非可选属性都被初始化。而初始化又分为designated和convenience两种。还有required,required可以和那两种方法进行组合。默认是非required,designated
规则如下:

  1. designated和convenience都可以有多个实现
  2. designated初始化方法里必须保证的非可选属性都被初始化.
  3. 子类的designated初始化方法必须调用父类的designated初始化方法。而且对自己的独有的属性(非继承来的)的赋值语句必须写在调用父类的designated初始化方法之前,如果想更改父类初始化方法中的赋值,则可以在调用父类初始化方法之后,再次进行更改
  4. convenience初始化方法必须调用自己的designated初始化方法
  5. extension里不能有designated初始化方法
  6. 如果子类里有自己的初始化方法,则也必须重写父类required的初始化方法。允许把required designated 重写成designated convenience,当然反过来也可以
  7. 如果子类里重写了父类required的初始化方法,则不会继承父类其他的初始化方法

针对第6,7两点的例子如下:

class Person {
    var name : String
    var age :Int
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    required convenience init(name: String) {
       self.init(name: name, age: 18)
    }
}
class Student: Person {
    var grades: [String] = []
    //把父类的required convenience重写成了required designated
    required init(name: String) {
        super.init(name: name, age: 18)
    }
}
//编译不通过 错误信息:Extra argument 'age' in call
//说明没有继承父类其他的初始化方法
let student = Student(name: "lkk", age: 22) 

相关文章

  • Swift对象的初始化

    Swift对象的初始化需要保证所有的非可选属性都被初始化。而初始化又分为designated和convenienc...

  • Swift 的便利构造函数

    在Swift中可以使用便利构造函数,在对象初始化的时候加入对对象属性的约束来对对象的初始化进行操作,对于不符合属性...

  • 构造方法总结一

    作用:对实例对象的内容进行初始化Swift要求类或者结构体中的存储属性(非lazy的)在对象构造完毕后要有初始化值...

  • Chapter 4. Object Types(第一部分)

    在Swift中存在三种对象类型:结构体、枚举、类! 一、对象类型的声明与特性 二、初始化 概述 初始化的方法用于创...

  • Objective-C与Swift语言对象的初始化

    探究一下Objective-C与Swift语言对象的初始化。 一些概念的定义(Objective-C和Swift定...

  • Swift的init方法学习笔记

    Swift语言中的init方法是用来创建对象的,有着比较严格的调用方式和实现方式。 初始化方法的顺序 Swift为...

  • Swift 5.1 (14) - 初始化和反初始化

    Swift 5.1 (14) - 初始化和反初始化Swift 5.1 (14) - 初始化和反初始化

  • Swift中的面对对象开发

    Swift中的面对对象开发 一.构造函数基础 构造函数是一种特殊的函数主要用来在创建对象时初始化对象为对象成员变量...

  • Swift 基本语法讲解

    Swift 构建对象和OC的区别 对于 Objective-C分为两步 alloc 分配内存 init 初始化 [...

  • swift学习手记-构造函数

    1.对象的创造过程 在swift中必选属性,初始化是分段的,先初始化本类的必选属性,然后再调用super.init...

网友评论

    本文标题:Swift对象的初始化

    本文链接:https://www.haomeiwen.com/subject/tfyhwftx.html