swift中的默认初始值设定项

swift中的默认初始值设定项,swift,Swift,我用字符串选项(string?)创建了一个swift类,并在另一个swift文件中实例化了该类,得到了一个编译错误。当我在同一个文件中实例化该类时,没有错误。我做错什么了吗?我仔细检查了该行为,该行为与swift文档中给出的类定义一致: class ShoppingListItem { var name: String? var quantity = 1 var purchased = false } var item = ShoppingListItem() 摘自:苹

我用字符串选项(string?)创建了一个swift类,并在另一个swift文件中实例化了该类,得到了一个编译错误。当我在同一个文件中实例化该类时,没有错误。我做错什么了吗?我仔细检查了该行为,该行为与swift文档中给出的类定义一致:

class ShoppingListItem {
    var name: String?
    var quantity = 1
    var purchased = false
}
var item = ShoppingListItem()
摘自:苹果公司《Swift编程语言》。iBooks

如果
var item=ShoppingListItem()
appDelegate.swift
中完成,则从函数
应用程序:didfishlaunchwithoptions
中,我们得到错误:

<class> cannot be initialised because it has no accessible initializers
无法初始化,因为它没有可访问的初始值设定项
OTOH,如果我们在类声明结束时保持实例化,那么就没有问题了


编辑:这个问题不是一个showstepper,当前默认的初始化器行为似乎不一致,或者我需要更好地理解它

可能是Swift编译器和访问控制的问题(不是指手画脚,只是试图排除故障)。向类中添加显式初始值设定项,并查看其是否有效:

class ShoppingListItem {
    var name: String?
    var quantity = 1
    var purchased = false

    init() { }
}
如果这不起作用,那么将该类与初始值设定项一起设置为public

    public class ShoppingListItem {
        var name: String?
        var quantity = 1
        var purchased = false

        public init() { }
    }

在本例中,为所有成员提供默认值

var name: String? = nil

修复错误。

请发布您的错误,并在您使用类的位置添加一些上下文,我不确定我是否理解这个问题。您是否添加了
init(){}
?@PseudoNym01存在编译错误:无法初始化,因为它没有可访问的初始化器。@HighFlyingFantasy我创建了一个新的swift文件,其中包含我的模型,我在其中创建了一个类(以上面的代码作为示例类)。然后,我在appDelegate-ApplicationIDFinishLaunchingWithOptions中实例化了该类。这样做会产生编译错误,如上所述。是的,添加一个显式init()确实有效,这就是我所做的,问题的关键是我想确定这是编译器的问题。从目前的回答来看,这似乎是一个编译器问题。如果没有其他相互矛盾的回答,我会将此标记为答案。这不是编译器问题。所有纯Swift类(没有父类的类)都需要至少一个初始值设定项(或其所有成员的初始值,包括Optionals)。苹果的文档并没有很好地解释这一点。我正在一个操场上使用它,结果发现我还需要将类、init和变量公开,以便访问它们。感谢您在这方面的帮助。为什么游乐场要求初始值设定项是公共的,但以NSObject作为父对象的子类层次结构却没有?我们刚刚发现了sameIt,它修复了错误,但swift book说“如果您定义一个可选常量或变量而不提供默认值,那么该常量或变量将自动设置为nil:”。那么,为什么这里需要显式提供nil?没有进行更改