• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift初始化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

知识点总结:

1、结构体

1.1、默认初始化方法:1、空初始化方法;2、成员初始化方法

struct Person{
    var name = "tom"
    var age = 1
    
}

let person = Person()//空初始化方法
print("person:name=\(person.name),age=\(person.age)")

let person1 = Person(name:"JIM",age:3)//成员初始化方法
print("person:name=\(person1.name),age=\(person1.age)")

1.2、自定义初始化方法和委托初始化方法

一旦有了自己的初始化方法,swift就不会提供默认的初始化方法。swift编译器允许在初始化过程中初始化常量属性。

struct Person{
    var name:String
    let age:Int
    
    init(name:String,age:Int){
        self.name = name
        self.age = age
    }
    //委托初始化
    init(name:String){
        self.init(name: name, age: 2)
    }
    
    
}

let person1 = Person(name:"JIM",age:3)
print("person:name=\(person1.name),age=\(person1.age)")

2、类初始化

2.1、默认初始化方法

swift 只会提供一个默认的空初始化方法。

2.2 指定初始化方法和便捷初始化方法

一般来说,类不会继承父类的初始化方法,因为swift希望避免子类在不经意间提供无法为所有属性赋值的初始化方法(子类经常会增加父类不存在的属性)。让子类提供自己的初始化方法可以避免实例被不完整的初始化方法初始化。不过,类确实会在一些情况下自动继承父类的初始化方法。如果子类为所有新增的属性提供了默认值,那么在以下两种场景下,类会继承父类的初始化方法。

  • 如果子类没有定义任何指定初始化方法,就会继承父类的指定初始化方法。
  • 如果子类实现了父类的所有指定初始化方法(无论是通过显示实现还是隐式继承),就会继承父类的所有便捷初始化方法

class Person{
    var name:String
    let age:Int
    
    init(name:String,age:Int){
        self.name = name
        self.age = age
    }
    convenience init(name:String){
        self.init(name: name, age: 0)
    }
}

class Student:Person{
    var score = 90
    
}

let stu = Student(name: "li")//因为子类所有新增属性提供了默认值,所以继承父类的指定构造函数和便捷函数
class Person{
    var name:String
    let age:Int
    
    init(name:String,age:Int){
        self.name = name
        self.age = age
    }
    convenience init(name:String){
        self.init(name: name, age: 0)
    }
}

class Student:Person{
    var score:Int
    override init(name: String, age: Int) {
        self.score = 40
        super.init(name: name, age: age)
    }
    
}

let stu = Student(name: "li")//因为子类实现父类所有的置顶初始化方法,所以继承父类的指定构造函数和便捷函数

2.3、必需初始化方法

一个类可以要求子类提供特定的初始化方法。

class Person{
    var name:String
    let age:Int
    
    required init(name:String,age:Int){
        self.name = name
        self.age = age
    }
}

class Student:Person{
    var score:Int
    required init(name: String, age: Int) {
        self.score = 40
        super.init(name: name, age: age)
    }
    
}

2.4、反初始化

class Person{
    var name:String
    let age:Int
    
    init(name:String,age:Int){
        self.name = name
        self.age = age
    }
    deinit {
        print("deinit")
    }
}

3、可失败的初始化方法

class Person{
    var name:String
    let age:Int
    
    init?(name:String,age:Int){
    self.name = name
    self.age = age
    }
}

struct Town{
    var region = "left"
    init?(region:String) {
        self.region = region
    }
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap