标签:
class Person: NSObject {
var name : String
var age : Int
// 重写了NSObject(父类)的构造方法
override init() {
name = ""
age = 0
}
}
// 创建一个Person对象
let p = Person()
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)
class Person: NSObject {
// 结构体或者类的类型,必须是可选类型.因为不能保证一定会赋值
var name : String?
// 基本数据类型不能是可选类型,否则KVC无法转化
var age : Int = 0
// 自定义构造函数,会覆盖init()函数
init(dict : [String : NSObject]) {
// 必须先初始化对象
super.init()
// 调用对象的KVC方法字典转模型
setValuesForKeysWithDictionary(dict)
}
}
// 创建一个Person对象
let dict = ["name" : "why", "age" : 18]
let p = Person(dict: dict)
import UIKit class Person: NSObject { //1:定义类的实例属性,必须保证初始化有默认值,或在初始化中给属性赋值,基本数据类型默认值为0,对象或是结构体默认的值为可选类型,可选类型在没有赋值之前为nil var name : String? var age : Int = 0 //2:重写类的init方法,必须加override override init() { // 在构造函数中,如果没有明确super.init(),那么系统会帮助调用super.init() // super.init() print("------") } //3:自定义构造函数:带参数 init(name : String, age : Int) { //给类的实例属性复制的时候,可以直接赋值,不用self,当两个名字不同的时候,可以用self来区分不同的值 self.name = name self.age = age } //4:字典转模型:AnyObject为任意类型,可为nil,也可以不为nil,dic["name"],取出的类型为AnyObject类型,而属性name为可选类型,是两个完全不相同的类型,所以不能去赋值。要进行类型转化:as? 最终转成的类型是一个可选类型,as! 最终转成的类型是一个确定的类型 init(dic : [String : AnyObject]) { let tempName = dic["name"] // tempName是一个AnyObject类型?,转成String? // as? 最终转成的类型是一个可选类型 // as! 最终转成的类型是一个确定的类型 name = tempName as? String//将AnyObject类型的tempName常量转换为可选类型与name类型相同,所以可以给name去赋值 /* let tempAge = dict["age"] let tempAge1 = tempAge as? Int if tempAge1 != nil { age = tempAge1! } */ //dic["age"]为AnyObject类型,将此类型转换为与age类型相同才能赋值,先转换为可选类型dic["age"] as? Int,有可能取出的age为nil,就会出现错误,所以进行可选绑定,如果不为nil,强制解包赋值 if let tempAge = dic["age"] as? Int { age = tempAge } } init(dict : [String : AnyObject]) { super.init()//调用此方法可以初始化一个类实例 setValuesForKeys(dict)//调用类实例的方法,可以直接写,不用self.去调用 } //重写类中的方法必须加上override override func setValue(_ value: Any?, forUndefinedKey key: String) { } } let p = Person()//初始化对象 let p1 = Person(name: "why", age: 18) print(p1.age) print(p1.name) //as AnyObject:因为规定了字典的value值类型为AnyObject类型,所以在外部传递参数的时候,要将参数转为相同类型as AnyObject就是转换为AnyObject的类型 let p2 = Person(dict: ["name" : "why" as AnyObject, "height" : 1.88 as AnyObject, "age" : 18 as AnyObject]) print(p2.age) print(p2.name)
标签:
原文地址:http://www.cnblogs.com/cqb-learner/p/5885667.html