Преобразование из «[[AnyHashable: Any]]» в несвязанный тип «[AnyHashable: Any]» всегда завершается неудачно - PullRequest
0 голосов
/ 19 мая 2019

Обновление

Как я могу это исправить?

guard let imgUrl = url?.absoluteString else { return }
let imageURL = [AnyHashable("imageUrl"): imgUrl]  as [AnyHashable : Any]
let postTimeValue = [AnyHashable("postTimeStamp"): currentPostTimeStamp] as [AnyHashable: Any]
let timeValue = [AnyHashable("timeStamp"): media.timeStamp!] as [AnyHashable: Any]
let mediaRef = postRef.child("\(mediaNum)")
let caption = [AnyHashable("Caption") : caption] as [AnyHashable: Any]

let dataToUpdate = [imageURL, caption, timeValue, postTimeValue] as? [AnyHashable: Any]
mediaRef.updateChildValues(dataToUpdate!)

В последней строке я получаю сообщение об ошибке

Приведение из '[[AnyHashable: Any]]' к несвязанному типу '[AnyHashable: Any]' всегда завершается неудачей

Я думаю, что это сработает, если привести этот пример с помощью firebase:

let updatedUser = ["name": "Shannon", "username": "shannonrules"]
let ref = Firebase(url: "https://<YOUR-FIREBASE-APP>.firebaseio.com")

let fanoutObject = ["/users/1": updatedUser, "/usersWhoAreCool/1": updatedUser, "/usersToGiveFreeStuffTo/1", updatedUser]

ref.updateChildValues(updatedUser) // atomic updating goodness

Я прочитал эту статью из firebase и хотел бы внедрить ее в свой проект. Проблема, однако, в том, что я плохо понимаю, о чем идет речь.

Может кто-нибудь объяснить простыми словами, как работает функция разветвления?

Например:

Что здесь происходит?

let updatedUser = ["name": "Shannon", "username": "shannonrules"]
let ref = Firebase(url: "https://<YOUR-FIREBASE-APP>.firebaseio.com")

let fanoutObject = ["/users/1": updatedUser, "/usersWhoAreCool/1": updatedUser, "/usersToGiveFreeStuffTo/1", updatedUser]

ref.updateChildValues(updatedUser) // atomic updating goodness

Похоже, fanoutObject никогда не использовался.

1 Ответ

1 голос
/ 20 мая 2019

Вы создали четыре [AnyHashable : Any] словарей.Чтобы присоединить эти словари к другому словарю [AnyHashable : Any], не следует заключать словари в массив и вводить регистр как [AnyHashable : Any].Используйте методы сокращения и объединения, чтобы объединить все словари

let dataToUpdate = [imageURL,postTimeValue,timeValue,caption].reduce([AnyHashable: Any]()) { (result, dict) in
    result.merging(dict, uniquingKeysWith: { (_, new) in new })
}
ref.updateChildValues(dataToUpdate)

Или

var dataToUpdate = [AnyHashable: Any]()
guard let imgUrl = url?.absoluteString else { return }
dataToUpdate[AnyHashable("imageUrl") = imgUrl as Any
dataToUpdate[AnyHashable("postTimeStamp") = currentPostTimeStamp as Any
dataToUpdate[AnyHashable("timeStamp") = media.timeStamp! as Any
let mediaRef = postRef.child("\(mediaNum)")
dataToUpdate[AnyHashable("Caption") = caption as Any
ref.updateChildValues(dataToUpdate)

Или

var dataToUPdate = [AnyHashable: Any]()
dataToUPdate.merge(imageURL) { (_, new) in new }
dataToUPdate.merge(postTimeValue) { (_, new) in new }
dataToUPdate.merge(timeValue) { (_, new) in new }
dataToUPdate.merge(caption) { (_, new) in new }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...