我有这么定义的类:
class User {
var name : String?
}
我使用的代码使用它在我的ViewController:
import UIKit
class ViewController: UIViewController {
let user : User = User()
}
我有编译错误
用户不与constructible()
我知道,在斯威夫特的属性必须有一个默认的,但可选的有一个(无)。 如果我初始化属性“名称”的错误消失为零或添加一个init()初始化。 但我不明白为什么我的选购也没有无默认。
顺便说一句,在操场下面的代码编译完美:
class ViewController: UIViewController {
let user : User = User()
}
class User {
var name : String?
}
let vc = ViewController()
而且很奇怪。
这个问题关系到这个 ,但我不明白的回答有(为什么选在操场上默认,但不是在应用程序?)。
编辑 :错误发生仅当用户类是在分离的文件中定义。 Xcode是贝塔3(参照图像)
您应该提交错误报告 - 这绝对是由编译器不正确的行为。 当您尝试初始化您使用的是默认初始化这样- 苹果公司的文件中指出:
迅速提供的任何结构或基类,对于其所有属性提供缺省值,并且不提供至少一个初始值设定本身默认初始值。 默认初始化只是简单地创建了所有其属性设置为默认值的新实例。
那么说明这个例子:
class ShoppingListItem {
var name: String?
var quantity = 1
var purchased = false
}
var item = ShoppingListItem()
然后说,在下面的段落:
...(该name
属性是一个可选的String
属性,因此它会自动接收到的默认值nil
,即使这个值是不是写在代码。)...
我想你的代码中使用的Xcode 6 Beta 3的iOS应用程序,它只是编译并运行良好。
该代码是相同的 :
class User {
var name : String?
}
class ViewController: UIViewController {
let user : User = User()
override func viewDidLoad() {
super.viewDidLoad()
}
}
如果我设置在这条线断点:
let user : User = User()
它停止如预期。
您正在使用的Beta 3? 你有双重检查你的代码,以确保它实际上是你已经张贴在这里呢?
如果你想它来编译你写你的用户类这样的,可能不理想,但似乎工作github.com/valfer/OptionalBug
class User {
var name : String?
init() {
}
}