我使用字符串选项(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,当前的默认初始化行为似乎不一致或我需要更好地理解
答案 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
修正错误。