我正在跟随iBook进行快速编程,但是当我尝试用var构建一个类时,我遇到了一个错误。这是一个结构和一个类:
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
我可以很好地创建一个Resolution结构的实例,但我似乎无法为VideoMode类创建一个。
var r = Resolution()
println("Width:\(r.width) Height:\(r.height)")
r.height = 1234
r.width = 9877
println("Width:\(r.width) Height:\(r.height)")
var vm = VideoMode() //Says that 'VideoMode' is not constructible with ()
let vm = VideoMode() //Apparently this works though.... why?
vm.resolution.width = 22222
vm.resolution.height = 1234
vm.name = "Calimari"
print(vm)
我发现这个奇怪的人能解释一下吗?
更新: 显然它在游乐场工作正常。我不是在操场上跑这个。我使用swift代码使用主详细信息模板运行它。我在viewDidLoad方法中添加了“var vm = VideoMode()”,我收到一个错误。但是如果我把它改成“让”似乎没问题。不知道为什么会有所作为。
答案 0 :(得分:2)
显然是"姓名"末尾的问号?变量声明阻止了它的构建。
//Implementation file of VideoMode
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String = "" //removed the question mark
}
//.....in another class
var vm = VideoMode(); //seems to work after making the above changes to the class declaration
答案 1 :(得分:2)
如果您没有为所有存储的属性定义默认值,那么您必须定义init()
。
var name: String? // There's no default value here. Either set name to `nil` or define init()
在创建该类或结构的实例时,类和结构必须将所有存储的属性设置为适当的初始值。存储的属性不能保留在不确定的状态。
您可以在初始值设定项中设置存储属性的初始值,也可以通过将默认属性值指定为属性定义的一部分来设置初始值。以下各节介绍了这些操作。
正如用户@valfer强调的那样,我found the following:
可选属性类型
[...]可选类型的属性会自动初始化,其值为nil,表示该属性在初始化过程中故意“没有值”。
我忽略了上述内容是否从一开始就存在,或者是否在事后添加,因为在撰写本文时该语言处于测试阶段且仍处于不稳定状态。
答案 2 :(得分:-1)
我猜你忘了放: NSObject
class VideoMode: NSObject {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}