【发布时间】:2015-08-18 16:35:51
【问题描述】:
我对如何使用便捷初始化器和指定初始化器有点了解。这里是一个名为ClassA的示例类
class ClassA {
var number:Int
convenience init(){
self.init(newNumber: 10)
}
init(newNumber: Int) {
self.number = newNumber;
}
}
这个类运行良好,但在实现另一个名为 Base 的类时遇到了一些麻烦。代码如下:
class Base {
var classObject:ClassA
init(object: ClassA) {
self.classObject = object
}
convenience init(){
self.init(object: ClassA.init())
}
}
在类Base的便利构造器中,我调用了ClassA的便利构造器,并将其作为Base的指定构造器的参数。
但是,我得到两个语法错误。
- 预期的成员名称或类型名称后的构造函数调用。
- () 不能转换为 A 类。
如果我使用
self.init(object: ClassA.init(newNumber: 10))
而不是
self.init(object: ClassA.init())
然后第一个错误消失了。 ClassA 的便捷初始化器似乎无法识别。
【问题讨论】:
-
你的代码对我来说是完美的编译。也许您在早期版本的 Swift 中遇到了错误?更新到 Swift 2.0 并重试。投票结束是不可重现的。
-
我使用的是 Xcode 6.4。我应该更新到 7.0 吗?
-
@matt 编译不正确。
ClassA.init()返回无效。你应该使用ClassA() -
它是可以用 Xcode 6.4 重现的。
-
@MartinR 如果这是 Xcode 6.4 中的错误并且在 Xcode 7 中已修复,那么它是已修复的错误。 — 但是,@Roger 也是对的:显式使用
init()应该仅限于self.init()之类的内容。
标签: swift class initialization convenience-methods