斯威夫特可选属性错误(Swift optional property error)

2019-10-20 11:39发布

我有这么定义的类:

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(参照图像)

Answer 1:

您应该提交错误报告 - 这绝对是由编译器不正确的行为。 当您尝试初始化您使用的是默认初始化这样- 苹果公司的文件中指出:

迅速提供的任何结构或基类,对于其所有属性提供缺省值,并且不提供至少一个初始值设定本身默认初始值。 默认初始化只是简单地创建了所有其属性设置为默认值的新实例。

那么说明这个例子:

class ShoppingListItem {
    var name: String?
    var quantity = 1
    var purchased = false
}
var item = ShoppingListItem()

然后说,在下面的段落:

...(该name属性是一个可选的String属性,因此它会自动接收到的默认值nil ,即使这个值是不是写在代码。)...



Answer 2:

我想你的代码中使用的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? 你有双重检查你的代码,以确保它实际上是你已经张贴在这里呢?



Answer 3:

如果你想它来编译你写你的用户类这样的,可能不理想,但似乎工作github.com/valfer/OptionalBug

class User {

    var name : String?

    init() {

    }
}


文章来源: Swift optional property error
标签: swift ios8