我有一个如此定义的课程:
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(见图片)
答案 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() {
}
}