swift 自定义类的构造函数,有参构造、无参构造

import UIKit

class person : NSObject {
    var name : String?
    var age : Int = 0
    
    //1.重写父类的初始化方法
    override init(){
        //在构造函数中,如果没有明确调用super.init(),那么系统会自动帮你调用super.init()
        super.init()
        
        print("-------")
    }
    
    //2.自定义构造函数,直接追加参数
    init(name:String , age:Int) {
        self.name = name
        self.age = age
    }
    /*
    //3.1自定义构造函数,使用字典作为参数   (第一种方法)
    init(dict : [String:Any]) {
        let tempName1 = dict["name"] //此时得到的tempName1是Any?任意的可选类型
        let tempAge1 = dict["age"] //此时得到的tempAge1是Any? 任意的可选类型
        //as?最终转成的类型是一个可选类型
        //as!最终转成的类型是一个确定类型
        let tempName2 = tempName1 as? String //此时得到的tempName2是String? 字符串的任意类型
        name = tempName2 //swift是强类型语言,只有相同的类型才可以赋值
        
        //第一种age赋值方法,不安全如果字典中没有传age参数会崩溃
        //let tempAge2 = tempAge1 as! Int //此时得到的tempAge2是Int Int类型
        //age = tempAge2 //swift是强类型语言,只有相同的类型才可以赋值
        
        
        //第二种age赋值方法,如果字典中没有传age参数不会造成崩溃
        if let tempAge = tempAge1 as? Int {//先把任意可选类型转化成Int?可选类型,再使用可选绑定拿到int值
            
            self.age = tempAge
        }
    }*/
    
    
    //3.2自定义构造函数,使用字典作为参数   (第二种方法)
    init(dict:[String:Any]) {
        super.init()
        setValuesForKeys(dict)
    }
    
    
    //避免字典参数中传的参数在类中没有定义相应的属性造成崩溃,重写此方法
    override func setValue(_ value: Any?, forUndefinedKey key: String) {
        
    }
    
    
}

//创建person对象
let p1 = person()

//使用有参构造创建person对象
let p2 = person(name:"zhengyanfeng" , age:18)

print(p2.name!,p2.age)

//使用以字典为参数的有参构造创建对象
let p3 = person(dict: ["name":"zhengyanfeng","age":17,"height":1.88])

print(p3.name! , p3.age)













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值