Swift可选属性错误

时间:2014-07-17 15:00:29

标签: swift ios8

我有一个如此定义的课程:

class User {

    var name : String?
}

我使用代码在我的ViewController中使用它:

import UIKit

class ViewController: UIViewController {

    let user : User = User()
}

我有编译错误

  

用户无法与()

构建

我知道Swift中的属性必须有一个默认值,但是可选的有一个(nil)。如果我将属性“name”初始化为nil或添加init()初始值设定项,则错误消失。但是我不明白为什么默认情况下我的选项没有nil。

顺便说一下,游乐场中的以下代码完美编译:

class ViewController: UIViewController {

    let user : User = User()
}

class User {

    var name : String?
}
let vc = ViewController()

这很奇怪。

这个问题与this有关,但我不明白那里的答案(为什么选项在操场上有默认但在应用程序中没有?)。

编辑:仅当在分离的文件中定义User类时才会发生错误。 XCode是Beta 3(见图片)

XCode Versione

User class file

view controller file

3 个答案:

答案 0 :(得分:0)

您应该提交错误报告 - 这绝对是编译器的错误行为。当您尝试初始化时,您正在使用默认初始化程序 - Apple's documentation状态:

  

Swift为任何结构或基类提供默认初始值设定项   它提供了所有属性的默认值,但没有   至少提供一个初始化程序。默认的初始化程序   只需创建一个新实例,并将其所有属性设置为它们   默认值。

然后显示这个例子:

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

然后在以下段落中说:

  

...(name属性是可选的String属性,所以它   自动接收默认值nil,即使这样   值不会写在代码中。)...

答案 1 :(得分:0)

我在使用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吗?您是否仔细检查过您的代码,以确保它实际上是您在此处发布的内容?

答案 2 :(得分:0)

如果你想要编译你编写这样的用户类,可能不太理想,但似乎可以在github.com/valfer/OptionalBug

中工作
class User {

    var name : String?

    init() {

    }
}