类的初始化方法

  1. Swift 的 Class 中所有的属性都必须初始化

    class Person: NSObject {
    
        // 下面属性初始化值为 nil
        var name: String?
        var age: Int?
        var gender: String?
    
    }
    
  2. 属性在初始化方法中初始化, 属性可以不加可选 ?

    class Person: NSObject {
    
        var name: String 
        var age: Int
        var gender: String
    
        // 自定义初始化方法
        init(name: String, age: Int, gender: String) {
            self.name = name
            self.age = age
            self.gender = gender
        }
    }
    
  3. Swift 允许方法重载, 方法名可以一致, 只要参数和返回值有不一致. 如果自定义了初始化方法, 那么原来 init() 方法将失效, 除非重写初始化方法

    class Person: NSObject {
    
     var name: String
     var age: Int
     var gender: String
    
     // 重写初始化方法
     override init() {
         self.name = "cui"
         self.age = 20
         self.gender = "man"
     }
    
     // 自定义初始化方法
     init(name: String, age: Int, gender: String) {
         self.name = name
         self.age = age
         self.gender = gender
     }
    }
    

KVC 赋值注意点

    // KVC 键值编码
    // 1.如果在初始化方法中进行KVC赋值, 需要调用 super.init() 进行初始化
    // 调用 super.init()的目的就是为了能在 KVC 赋值之前给属性分配存储空间
    // 2.如果定义一个对象属性, 那么后面可以写上 ?
    // 3.如果定义一个基本数据类型, 那么建议直接赋值为 0 或者 true 布尔值
    // 4.KVC 赋值属性必须和字典 key 一致, 可以有额外的属性
    var name: String?
    var gender: String?
    var age: Int = 0
    var marry = true

    init(dict: [String : NSObject]) {
        super.init()
        setValuesForKeysWithDictionary(dict)
    }

results matching ""

    No results matching ""