swift学习之构造函数

1、 子类没有实现父类的任何一个指定构造函数,那么子类将回继承父类的所有指定构造函数
2、子类实现了父类的所有指定构造函数,那么子类将回继承父类所有的便利构造函数
3、如果不想手动实现父类的必须构造函数required那么不要实现父类的任何构指定造函数,通过继承来实现父类的必须构造函数。如果要定义构造函数直接使用便利构造函数即可。
4、遍历构造函数convenience可以理解为工厂方法简化对象创建,必须调用指定构造函数,本身并不需要负责初始化工作

构造函数

构造函数都是以init开头的
构造函数可以为存储类型的属性赋初值, swift类和结构体创建实例时候,必须保证所有存储型属性都是有值的
构造函数对属性的初始化过程,是不能触发属性观察器的
如果自定义了构造方法那么默认的构造方法就会失效

默认构造方法

如果没有自定义过构造函数(没有手动实现过init开头的方法),那么系统会自动提供默认构造函数,所以子类并不一定要继承父类的构造器,目的是开辟内存空间,为所有的存储属性设置默认值,如果是可选性的属性,自动赋值为nil
默认构造器init(),因为每一个类型至少有一个指定构造器,所以类的默认构造器必定是指定构造器
结构体还会提供逐一成员构造器

struct Demo {
    private var _m = "m"
    var d:Int = 0;
    var e:String?
    var m:String{
        get{
           return _m
        }
        set{
           _m = newValue
        }
    }
}
//Demo的逐一成员构造器
Demo(_m: String, d: Int, e: String?)

自定义构造方法

如果自定义了构造方法那么默认的构造方法就会失效
构造函数中的可选值需要注意init(dict:)

init(dict:[String:NSObject])
{
    //必须调用,为的是给属性分配存储空间,但是super.init()在分配存
    //储空间的时候,如果发现属性是一个可选类型的对象才会给该属性分
    //配存储空间,而如果是一个可选型的基本数据类型,则不给器分配存
    //储空间,没有存储空间,赋值会奔溃
    super.init()
    //字典转模型
    setValuesForKeysWithDictionary(dict)
}

//与上面方法务必同时出现
override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
}

类的继承和构造函数规则

默认的构造器就是指定构造器,以convenience修饰的构造器就是便利构造器
每个类至少有一个指定构造器
指定构造器必须调用其直接父类的指定构造器
便利构造器必须调用同一类中的其他构造器,并器最终调用一个指定构造器
类的默认构造器init()肯定是一个指定构造器

//父类
class Person: NSObject {
    override init() {
        super.init()
    }
   
    init(name:String) {
        super.init()
    }
}
//子类
class Student: Person {
    //指定构造器
    override init() {
        super.init()
    }
    //便利构造器
    convenience override init(name: String) {
        self.init()
    }
    //便利构造器
    convenience init(age:Int) {
        self.init()
    }
}

必要构造器

在类的构造器前添加一个require关键字这个构造器就成为必要构造器,在类重写父类的必要构造器同样需要添加require
requireoverride相遇只留require

析构函数

析构函数deinit类似于OC的dealloc方法,类似于移除通知中心这样的操作就在这里完成
同样的deinit不能被显示的调用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本章将会介绍 存储属性的初始赋值自定义构造过程默认构造器值类型的构造器代理类的继承和构造过程可失败构造器必要构造器...
    寒桥阅读 4,132评论 0 0
  • 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置实例中每个...
    莽原奔马668阅读 3,933评论 0 3
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 6,874评论 1 6
  • 构造过程 构造过程是使用类、结构体或枚举类型的实例之前的准备过程。在新实例可用前必须执行这个过程,具体操作包括设置...
    蛊毒_阅读 4,032评论 0 2
  • 这两天喜欢上了蒸脸。其实也是看到了变化才决定坚持下去。 原因呢,是前段时间由于各种烦心事导致压力太大,吃不好睡不好...
    77柒度阅读 1,841评论 0 1

友情链接更多精彩内容