Tôi có một enum như thế này:Làm thế nào tôi có thể lưu trữ một giá trị enum Swift trong NSUserDefaults
enum Environment {
case Production
case Staging
case Dev
}
Và tôi muốn lưu một thể hiện trong NSUserDefaults như thế này:
func saveEnvironment(environment : Environment){
NSUserDefaults.standardUserDefaults().setObject(environment, forKey: kSavedEnvironmentDefaultsKey)
}
Tôi hiểu rằng một enum Swift không phải là một NSObject, và mà làm cho nó khó khăn để tiết kiệm, nhưng tôi không chắc chắn cách tốt nhất là để chuyển đổi nó để một cái gì đó có thể lưu trữ.
Và đối với những người đang tìm đọc ... myEnv = Môi trường (rawValue: defaults.stringForKey (kSavedEnvironmentDefaultsKey))! –
Đối với bất kỳ ai gặp sự cố với trình khởi tạo 'rawValue' hoặc thuộc tính trên enum của bạn, hãy đảm bảo rằng enum của bạn mở rộng loại' rawValue' của bạn. Ví dụ, trong ví dụ của OP, 'Environment' mở rộng' String'. Tôi đã bỏ lỡ lần đầu tiên này. –
Vì bạn không có quyền kiểm soát những gì được lưu trữ trong sở thích, bạn nên kiểm tra mặc định. StringForKey không phải là nil, và trong trường hợp đó hoặc nếu Môi trường kết thúc bằng 0 thay thế bằng giá trị mặc định. – gnasher729