使用自定义init主体的Singleton

时间:2017-10-26 10:04:40

标签: swift 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
            }
        }
    }

}

2 个答案:

答案 0 :(得分:2)

您不应声明具有相同名称的enumclass,编译器无法决定您尝试实例化哪一个,它认为此处static let sharedInstance = AppBundle() {{1 }}指的是AppBundle

您应该重命名enum,使其名称与您的班级不同。

您的代码中还存在其他一些问题。也就是说,如果要使用enum关键字将其声明为不可变,则无法为appBundle指定默认值。我已更改let方法以使用没有默认值的实现,并声明init不可变。

appBundle

答案 1 :(得分:0)

枚举AppBundle设置为String。

您需要为所有案例提供原始字符串值,例如:

enum AppBundle: String {
        case developer = "dev"
        case alpha = "alpha"
        case beta = "beta"
        case appStore = "appStore"
    }