我想用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
        }
    }

}

08-28 18:47