1
Firebaseを使用してJSONを取得し、GasUse
オブジェクトの配列に変換します。Closureが予期せずthrow(Firebase)を要求する
これはGasUse
クラスです。初期化子はDictionary
を受け入れ、キー:値のペアがないときにエラーをスローします。
class GasUse {
let distance: Double
let comment: String?
let addedByUser: String
let creationDate: Date
init(from jsonDict: [String:Any]) throws {
guard let distance = jsonDict["distance"] as? Double else { throw SerializationError.missing }
let comment = jsonDict["comment"] as? String
guard let addedByUser = jsonDict["addedByUser"] as? String else { throw SerializationError.missing }
guard let creationDateString = jsonDict["creationDate"] as? String else { throw SerializationError.missing }
self.distance = distance
self.comment = comment
self.addedByUser = addedByUser
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss +zzzz"
self.creationDate = dateFormatter.date(from: creationDateString)!
}
}
私はその後GasUse
が
Database.database().reference().observeSingleEvent(of: .value, with: { //Invalid conversion from throwing function of type '(_) throws ->()' to non-throwing function type '(DataSnapshot) -> Void'(rootSnapshot) in
let childSnapshots = rootSnapshot.children.allObjects as! [DataSnapshot]
let childValues = childSnapshots.map { $0.value as! [String: Any] }
for value in childValues {
do { let gasUse = try GasUse(from: value) }
catch SerializationError.missing { self.present(self.makeAlert("Error", "Missing value in json"), animated: true, completion: nil) }
catch SerializationError.invalid { self.present(self.makeAlert("Error", "Invalid value in json"), animated: true, completion: nil) }
}
})
を試す作成するには、このコードを使用しますが、機能は、私は私も次のようだと思っていること、その閉鎖のための特定のフォーマットを要求するようです。種類の機能を投げるから
無効変換 '(_)はスロー - >()' 非投げ機能タイプ '(DataSnapshot) - >ボイド' に(rootSnapshot)
にあるものここで間違っている?