необработанное значение необязательного типа не развернуто - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь развернуть необработанное значение типа enum в func toDictionary(), но получаю ошибку.Как я могу это исправить?

enum ChatFeatureType: String {

  case tenants
  case leaseholders
  case residents
}

class Chat {

 var featureType: ChatFeatureType?

  init(featureType: ChatFeatureType? = nil 
     self.featureType = featureType
  }

   //download data from firebase
 init(dictionary : [String : Any]) {
      featureType = ChatFeatureType(rawValue: dictionary["featureType"] as! String)!
     }

  func toDictionary() -> [String : Any] {

     var someDict = [String : Any]()

 //  I get error  on the line below: Value of optional type 'ChatFeatureType?' not unwrapped; did you mean to use '!' or '?'?
       someDict["featureType"] = featureType.rawValue ?? "" 
    }

 }

1 Ответ

1 голос
/ 20 марта 2019

Поскольку featureType является необязательным, вы должны добавить ? или !, поскольку ошибка говорит

someDict["featureType"] = featureType?.rawValue ?? "" 

Но имейте в виду, что ваш код надежно падает, когда вы создаете экземпляр Chat из словаря, а ключ не существует, потому что нет регистра "".

На самом деле целью перечисления является то, что значение всегда является одним из случаев. Если вам нужен неопределенный случай, добавьте none или unknown или аналогичный.

Это безопасная версия

enum ChatFeatureType: String {
     case none, tenants, leaseholders, residents
}

class Chat {

   var featureType: ChatFeatureType

   init(featureType: ChatFeatureType = .none)
       self.featureType = featureType
   }

   //download data from firebase
   init(dictionary : [String : Any]) {
       featureType = ChatFeatureType(rawValue: dictionary["featureType"] as? String) ?? .none
   }

   func toDictionary() -> [String : Any] {

      var someDict = [String : Any]()
      someDict["featureType"] = featureType.rawValue
      return someDict
  }
}
...