我想用private方法的自定义主体创建一个类singleton,但是我得到一个行的以下消息错误:static let sharedInstance = AppBundle()
调用中缺少参数“rawValue”的参数
代码
class AppBundle {
static let sharedInstance = AppBundle()
enum AppBundle: String {
case developer
case alpha
case beta
case appStore
}
let appBundle: AppBundle = .appStore
private init() {
if let bundleIdentifier = Bundle.main.bundleIdentifier {
switch bundleIdentifier {
case "com.app.developer":
self.appBundle = .developer
case "com.app.beta":
self.appBundle = .beta
case "com.app.alpha":
self.appBundle = .alpha
default:
self.appBundle = .appStore
}
}
}
}
最佳答案
您不应该用相同的名称声明一个enum
和一个class
,编译器不能决定您要实例化哪个,它认为static let sharedInstance = AppBundle()
这里的AppBundle
指的是enum
。
您应该重命名enum
,使其与您的类具有不同的名称。
您的代码中还存在其他一些问题。也就是说,如果要用appBundle
关键字声明它是不可变的,就不能给let
一个默认值。我已经更改了init
方法来处理没有默认值的实现,并声明appBundle
不可变。
class AppBundle {
static let sharedInstance = AppBundle()
enum AppBundleType: String {
case developer
case alpha
case beta
case appStore
}
let appBundle: AppBundleType
private init() {
if let bundleIdentifier = Bundle.main.bundleIdentifier {
switch bundleIdentifier {
case "com.app.developer":
self.appBundle = .developer
case "com.app.beta":
self.appBundle = .beta
case "com.app.alpha":
self.appBundle = .alpha
default:
self.appBundle = .appStore
}
} else {
self.appBundle = .appStore
}
}
}