加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift构造方法

发布时间:2020-12-14 02:37:13 所属栏目:百科 来源:网络整理
导读://如果定义属性的时候没有初始化,那么必须在后面写一个?//swift要求,属性是必须有初始值的//只要在构造方法中对属性进行了初始化,那么就不用写?class Person: NSObject { // 定义 "对象"属性可以使用? var name: String? // 定义 "基本数据类型" 最好赋



//如果定义属性的时候没有初始化,那么必须在后面写一个?
//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)//可以直接通过字典初始化
 }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读