关于Designated, Convenience 和 Required 区别

原创 2016年08月31日 11:04:47

关于Designated, Convenience 和 Required 区别
1.Designated (指定的)
顾名思义 在本文章中指的就是“Designated初始化方法”
在OC中,Init方法是非常不安全的,因为不能确保init只被调用一次,同时也不能确保init初始化方法调用后,实例内的每个变量都已经完成初始化。 因此在 Swift里对初始化方法加强了规范,确保每个实例初始化后,其内部的成员变量都已经完成初始化。
期间笔者还遇到一个小问题,let类型作为一个不变量 是不能被赋值的(这是对于构建线程安全的API很有用)。而在init方法里是可以进行赋值的,后来翻阅资料了解到,Swift的init方法只能被调用一次,所以在init方法中才可以赋值,而不会引起任何线程安全的问题。

2.Convenience (便利)
Convenience这类方法是Swift初始化方法中的“二等公民”相当于只要父类里面存在,我们就可以在子类中就可以使用。但是需要注意到的是Convenience的初始化方法是不能被子类重写或从子类中以super的方式调用。相当于子类不需要重写父类的这个初始化方法就可以使用
/示例/
class People {

var name: String

init() {

    name = "qq"

}

convenience init(number: Int) {
    self.init()
    name = String(number)
}

}

class TempPeople: People {

let page: Int

override init() {

    page = 10

}

}

/没有重写调用/
let model = TempPeople(number: 5)

3.Required (必需的)
如果你有一个父类的方法 必需强制要求所有子类重写,那就用到了Required。
/示例/

class People {

var name: String

required init() {

    name = "qq"

}

convenience init(number: Int) {
    self.init()
    name = String(number)
}

}

class TempPeople: People {

let page: Int

required init() {

    page = 10

}

}

这里的 TempPeople子类就必需要实现父类的init()方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wmmhwj/article/details/52382965

iOS Dev (48) initializer 和 convenience constructor

iOS Dev (48) initializer 和 convenience constructor 作者:大锐哥博客:http://prevention.iteye.com initiali...
  • prevention
  • prevention
  • 2014-02-06 20:34:05
  • 2701

[待添加]swift3.0 初始化方法中,你所不知道的事 Designated, Convenience, required

在swift中,初始化需要达成的目的只有一个 "安全" 在Objective-C中,init方法其实很不安全,在对象被创建后,并不能保证其中的方法都会初始化, 导致各种各样的奇葩问题出现. 所以s...
  • oDream122
  • oDream122
  • 2017-06-21 14:29:30
  • 150

Swift 类的继承 convenience required

看下面的代码 class Person { var name: String var health:Int = 100 { didSet{ if...
  • qq_18674153
  • qq_18674153
  • 2017-02-18 16:52:58
  • 923

Swift——convenience(便利构造函数)和类方法

import UIKit extension UIButton{ //swit中类方法是以class开头的方法,类似于oc中+开头的方法 class func create...
  • u012189584
  • u012189584
  • 2017-03-17 15:08:58
  • 3593

关于Designated, Convenience 和 Required 区别

关于Designated, Convenience 和 Required 区别 1.Designated (指定的) 顾名思义 在本文章中指的就是“Designated初始化方法” 在OC中...
  • wmmhwj
  • wmmhwj
  • 2016-08-31 11:04:47
  • 608

swift怎么解决错误提示 'required' initializer 'init(coder:)' must be...这个问题

在学习swift编写程序重写init方法时出现错误如下:'required' initializer 'init(coder:)' must be provided by subclass of 'U...
  • wsjshx
  • wsjshx
  • 2015-09-08 18:29:54
  • 1328

Swift 【DESIGNATED,CONVENIENCE 和 REQUIRED】

DESIGNATED,CONVENIENCE 和 REQUIRED 的使用。
  • Felicity294250051
  • Felicity294250051
  • 2017-11-27 21:00:35
  • 141

swift - Designated Initializer & Convenience Initializers

Designated initializers tend to set all of the properties up and let the user send in values for eac...
  • u012519228
  • u012519228
  • 2016-03-22 10:35:06
  • 209

Swift中的required修饰符

普通子类 通常情况下,一说到required修饰符,我们最先想到的应该就是普通类(class)的init()方法了。比如下面这个类: class MyClass { var str...
  • yongyinmg
  • yongyinmg
  • 2014-09-29 17:53:58
  • 13103

Swift:必须添加init?(coder decoder: NSCoder)的原因

当我们重写类的时候经常提示要添加代码: required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has n...
  • vistadk
  • vistadk
  • 2017-02-05 16:23:35
  • 4197
收藏助手
不良信息举报
您举报文章:关于Designated, Convenience 和 Required 区别
举报原因:
原因补充:

(最多只允许输入30个字)