iOS分享世界MG的Swift空间

13-Swift中类的构造函数

2016-04-18  本文已影响0人  Mg明明就是你

构造函数的介绍


构造函数的基本使用

  • 类的属性必须有值
class Person: NSObject {
    var name : String
    var age : Int

    // 重写了NSObject(父类)的构造方法
    override init() {
        name = ""
        age = 0
    }
}

// 创建一个Person对象
let p = Person()```

- 初始化时给属性赋值
 > - 很多时候,我们在创建一个对象时就会给属性赋值
  - 可以自定义构造函数
  - 注意(warming):  如果自定义了构造函数,会覆盖init()方法.即不在有默认的构造函数

class Person: NSObject {
var name : String
var age : Int

// 自定义构造函数,会覆盖init()函数
init(name : String, age : Int) {
    self.name = name
    self.age = age
}

}

// 创建一个Person对象
let p = Person(name: "why", age: 18)```

  • 真实创建对象时,更多的是将字典转成模型
class Person: NSObject {
    var name : String
    var age : Int

    // 自定义构造函数,会覆盖init()函数
    init(dict : [String : NSObject]) {
        name = dict["name"] as! String
        age = dict["age"] as! Int
    }
}

// 创建一个Person对象
let dict = ["name" : "why", "age" : 18]
let p = Person(dict: dict)```

- 字典转模型(利用KVC转化)
   > - 利用KVC字典转模型会更加方便
    - 注意:
      - KVC并不能保证会给所有的属性赋值
      - 因此属性需要有默认值
        - 基本数据类型默认值设置为0
        - 对象或者结构体类型定义为可选类型即可(可选类型没有赋值前为nil)

class Person: NSObject {
// 结构体或者类的类型,必须是可选类型.因为不能保证一定会赋值
var name : String?

// 基本数据类型不能是可选类型,否则KVC无法转化
var age : Int = 0

// 自定义构造函数,会覆盖init()函数
init(dict : [String : NSObject]) {
    // 必须先初始化对象
    super.init()

    // 调用对象的KVC方法字典转模型
    setValuesForKeysWithDictionary(dict)
}

}

// 实现这个方法,当不是转化出所有属性
override func setValue(value: AnyObject?, forUndefinedKey key: String) {

}

// 创建一个Person对象
let dict = ["name" : "why", "age" : 18]
let p = Person(dict: dict)```

上一篇 下一篇

猜你喜欢

热点阅读