Swift Class是不可构造的

时间:2014-06-04 04:02:19

标签: constructor swift

我正在跟随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()”,我收到一个错误。但是如果我把它改成“让”似乎没问题。不知道为什么会有所作为。

enter image description here

3 个答案:

答案 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()

来自Swift Documentation

  

在创建该类或结构的实例时,类和结构必须将所有存储的属性设置为适当的初始值。存储的属性不能保留在不确定的状态。

     

您可以在初始值设定项中设置存储属性的初始值,也可以通过将默认属性值指定为属性定义的一部分来设置初始值。以下各节介绍了这些操作。


附录:

正如用户@valfer强调的那样,我found the following

  

可选属性类型

     

[...]可选类型的属性会自动初始化,其值为nil,表示该属性在初始化过程中故意“没有值”。

我忽略了上述内容是否从一开始就存在,或者是否在事后添加,因为在撰写本文时该语言处于测试阶段且仍处于不稳定状态。

答案 2 :(得分:-1)

我猜你忘了放: NSObject

像这样:

class VideoMode: NSObject {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}