swift构造方法



//如果定义属性的时候没有初始化,那么必须在后面写一个?
//swift要求,属性是必须有初始值的
//只要在构造方法中对属性进行了初始化,那么就不用写?
class Person: NSObject {
    // 定义 "对象"属性可以使用?
    var name: String?
    // 定义 "基本数据类型" 最好赋初始值
    // Swift中基本数据类型设置为? , super.init()不会分配存储空间
    // 所以利用KVC赋值会报属性找不到
//    var age: Int?
    var age: Int = 0
    //如果是定义一个“对象属性”,那么可以写上?
    //如果是定义一个基本数据类型,那么建议直接赋值为0,因为super.init()方法在分配存储空间的时候,如果发现属性是一个对象,并且是一个可选类型,那么会给这个属性分配存储空间。但是如果属性是一个基本数据类型,并且是可选类型,那么super.init()不会给该属性分配存储空间,没有存储空间如果在构造方法中用字典使用KVC初始化,将会导致报错:提示基本属性找不到
    
    // 如果要初始化必须要重写init方法, 只要重写了init方法就不用加?号了
    override init()//重写了父类的构造方法,如果不重写,默认的构造方法将会失效
    {
        name = "lnj"
        age = 30
    }
    
    //重载:允许有同名的方法,中要形参数不一样或返回值不一样
    //Swift中支持方法名重载, 同样的名称只要参数不同就可以
    // 一旦自定义了init方法, 但是没有重写init方法, 默认的init方法就会失效
    //注意:如果自定义了构造方法,并且没有重写父类的构造方法,那么默认的构造方法就会失效
    init(name:String, age:Int)
    {
        self.name = name
        self.age = age
    }
    
    //开发中最常见的方法:通过字典创建对象
    init(dict: [String: NSObject])
    {
       
        // 使用kvc给self赋值之前, 必须调用super.init,
        // 目的是保证对象创建成功
        super.init() //注意点:如果想在构造方法中使用KVC给属性赋值,那么 在KVC之前必须调用super.init(),调用 super.init()的目的是在KVC赋值之前给属性分配存储空间
        self.setValuesForKeysWithDictionary(dict)//可以直接通过字典初始化
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值