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

【swift】--便利构造函数

发布时间:2020-12-14 07:12:29 所属栏目:百科 来源:网络整理
导读:【Swift大法好:昨天看博客的时候看到,有说Swift以后有可能开发安卓软件了。cool。。。】 默认情况下,所有的构造方法都是指定构造函数 Designated convenience 关键字修饰的构造方法就是便利构造函数 便利构造函数具有以下特点: 可以返回 nil 只有便利构

【Swift大法好:昨天看博客的时候看到,有说Swift以后有可能开发安卓软件了。cool。。。】


  • 默认情况下,所有的构造方法都是指定构造函数Designated

  • convenience关键字修饰的构造方法就是便利构造函数

  • 便利构造函数具有以下特点:

    • 可以返回nil

    • 只有便利构造函数中可以调用self.init()

    • 便利构造函数不能被重写或者super


便利构造函数应用场景

  • 根据给定参数判断是否创建对象,而不像指定构造函数那样必须要实例化一个对象出来

  • 在实际开发中,可以对已有类的构造函数进行扩展,利用便利构造函数,简化对象的创建

构造函数小结

  • 指定构造函数必须调用其直接父类的的指定构造函数(除非没有父类)

  • 便利构造函数必须调用同一类中定义的其他指定构造函数或者用self.的方式调用父类的便利构造函数

  • 便利构造函数可以返回nil、


import UIKit


/* -- KVC构造函数

KVC属性赋值的原理 -- 系统会给 实例化对象动态的发送 setValue(value: AnyObject?,forKey key: String),来给属性赋值

1.这个实例化对象 必须存在,内存分配

2.属性分配内存

*/


class Person: NSObject {


// 可选项,在初始化的时候会分配内存空间,默认值为nil

//姓名

var name: String?

// this class is not key value coding-compliant for the key age

// 年龄

// age 基本数据类型 -- 在Swift 里与 KVC不兼容

// age的默认值为nil,KVC找不这个属性

// 默认给这个 age = 0

var age: Int = 0

var sex: Int = 0

/*

便利构造 -- 可以根据 我们的属性来动态的判断是否会返回值

1. 有可能找不到对象,返回 nil

2. 便利构造需要借助其他的构造函数

3. 便利构造函数的关键字-- convenience

*/

//person 便利构造方法

convenience init?(name: String,age: Int,sex:Int) {

// 找对象的条件 -- 小于 18的 不行,大于 25的不行,我是男的,我得找女的

if age < 18 || age > 25 || sex == 1 {

return nil

}

// 必须初始化

self.init(dic:["name":name,"age":age,"sex":sex])

}

//kvc构造方法

init(dic: [String:AnyObject]) {

// 报错问题一: 调用 setValuesForKeysWithDictionary方法之前,必须调用 super.init

// 1. 完成本类的初始化

// 2. 父类也会初始化

// 3. 需要给 本类属性,进行初始化操作,进行初始化操作可以 在这个init里完成,name = "老王"

// 我们想通过 KVC动态给属性赋值,我们就需要把 属性设置成 可选项

super.init()

// 实例化对象已经创建完成,然后再调用 setValuesForKeysWithDictionary

// 调用 setValuesForKeysWithDictionary -- 调用 setValue for key 来给属性赋值

setValuesForKeysWithDictionary(dic)

}

//重写descriotion

override var description: String {

// 注意 keys

let keys = ["sex","name","age"]

return dictionaryWithValuesForKeys(keys).description

}

}

(编辑:李大同)

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

    推荐文章
      热点阅读