swift中的默认初始化程序

时间:2014-08-15 13:22:29

标签: swift

我使用字符串选项(String?)创建了一个swift类,并在不同的swift文件中实例化了该类,并出现了编译错误。当我在同一个文件中实例化该类时,没有错误。我在做什么不对劲?我仔细检查了行为,即使使用swift文档中给出的类定义,这种行为也是一致的:

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

摘自:Apple Inc.“The Swift Programming Language。”iBooks。 https://itun.es/in/jEUH0.l

如果var item = ShoppingListItem()已在appDelegate.swift中完成,则会从application:didFinishLaunchingWithOptions函数中收到错误:

<class> cannot be initialised because it has no accessible initializers

OTOH,如果我们在类声明结束后立即保留实例,就没有问题。

编辑:此问题不是showstopper,当前的默认初始化行为似乎不一致或我需要更好地理解

2 个答案:

答案 0 :(得分:32)

有可能是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() { }
    }

答案 1 :(得分:17)

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

var name: String? = nil

修正错误。