美文网首页
iOS Swift5 构造函数 designated、conve

iOS Swift5 构造函数 designated、conve

作者: 会写bug的程序媛 | 来源:发表于2021-11-15 14:27 被阅读0次

    1、关键字说明

    designated(中文含义:指定的) :它指的是我们定义的公开的构造函数;公开的构造函数至少有一个,也可以有多个; convenience(中文含义:便利的):我们可以用该关键字来扩展(即新增)构造函数,因此是修饰构造函数的,但需要注意几点: *必需在同一个类中使用; *必需调用一个 designated 构造函数,调用时使用的是 self.init,而不是 super.init; *子类无法重载被 convenience 修饰的构造方法; required(中文含义:必要的):子类必需要实现父类指定的构造函数;

    关键字 designated 和 convenience 修饰构造函数的关系:

    WX20211115-142732.png

    二、Demo

    定义基类People

        var name: String?
        var age: Int
        var sexy: Int
        
        init(_ name: String, age: Int, sexy: Int) {
            self.name = name
            self.age = age
            self.sexy = sexy
        }
        
        convenience init(_ name: String, age: Int) {
            self.init(name, age: age, sexy: 0)
        }
        
        required init(_ name: String) {
            self.name = name
            self.age = 0
            self.sexy = 0
        }
        
    }
    
    定义子类 Student
    class Student: People {
        // 父类的 designated 构造方法,子类可以进行重载
        override init(_ name: String, age: Int, sexy: Int) {
            super.init(name, age: age, sexy: sexy)
        }
        // 父类的 convenience 构造方法,子类无法继承
        // 父类的 required 构造方法,子类必须实现
        required init(_ name: String) {
            fatalError("init(_:) has not been implemented")
        }
    }
    

    相关文章

      网友评论

          本文标题:iOS Swift5 构造函数 designated、conve

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