- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于 swift 初始化器的问题。根据苹果的 Swift3.0
现在我有两个类 A 和 B(A 的子类)。 A 和 B 都有两个具有以下结构的指定初始化器
谁能建议 B 类的指定初始化器将如何调用 A 类的初始化器?
最佳答案
因为在 A
中有两个指定的初始值设定项,它们由于不同的签名而没有歧义,并且可以相互区分。这意味着您可以轻松地从子类 B
中调用 A
的适当指定 初始值设定项。例如,对于 A
为
class A {
var a: Int
// designated "#1"
init() {
a = 0
}
// designated "#2"
init(_ a: Int) {
self.a = a
}
// convenience initializer for A
convenience init(_ foo: String) {
print(foo)
self.init(42)
}
}
我们有,例如</p>
class B: A {
let b: Int
// designated "sub#1"
override init() {
b = 42
super.init() // use A's designated #1
}
// designated "sub#2"
override init(_ a: Int) {
b = 24
super.init(a) // use A's designated #2
}
// non-overriding designated "#3"
init(b: Int) {
self.b = b
super.init() // use A's designated #1
}
// convenience initializer for B
convenience init(_ foo: String) {
print(foo)
self.init() // use B's designated #1
}
// you may only call designated initializers of the superclass
}
但是请注意,子类的初始化器只能调用其父类(super class)的指定初始化器。 the Language Guide - Initializers - Initializer Delegation for Class Types 中的规则 1 和 2 涵盖了这一点[强调我的]:
Initializer Delegation for Class Types
To simplify the relationships between designated and convenience initializers, Swift applies the following three rules for delegation calls between initializers:
Rule 1
A designated initializer must call a designated initializer from its immediate superclass.
Rule 2
A convenience initializer must call another initializer from the same class.
Rule 3
A convenience initializer must ultimately call a designated initializer.
所以你不能从 B
的便利构造器访问 A
的便利构造器,而 B
的指定构造器自然必须,根据上面的规则 1,只调用 A
的指定初始化程序。
关于ios - 名称和便利初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41441247/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!