Как я могу привести ссылку в моей базе данных Firebase, которая может быть двух разных типов - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь сослаться на что-то в моей базе данных методом моментального снимка (?).

Я создаю маленькое приложение для пиццы

ref.child("Resturants").child("Da GiGi").child("pizzas").observeSingleEvent(of:.value, with: {(snapshot) in
    for granchild in (snapshot.children){
        let pizzaSnap = granchild as! DataSnapshot
        let dict = pizzaSnap.value as! [String: String??] // I get an error here: "Thread 1: signal SIGABRT"

        let nameUse = dict["name"] as? String
        let priceUse = dict["price"] as? String
        let toppingsUse = dict["toppings"] as? String

    }
}

В моей базе данных Firebase у меня есть "" вокруг имени и начинки, но не вокруг моей цены, что означает, что цена не относится к типустрока. Мой код работает, если я изменяю тип цены на строковый тип.

Я пытался устранить let dict:

ref.child("Resturants").child("Da GiGi").child("pizzas").observeSingleEvent(of:.value, with: {(snapshot) in
    for granchild in (snapshot.children){
        let pizzaSnap = granchild as! DataSnapshot

        let nameUse = pizzaSnap.value["name"] as? String
        let priceUse = pizzaSnap.value["price"] as? String
        let toppingsUse = pizzaSnap.value["toppings"] as? String

    }
}

Но теперь я, очевидно, получаю некоторые ошибки.

Как мне решить эту проблему?

1 Ответ

1 голос
/ 01 октября 2019

Что вам нужно сделать, это иметь словарь типа [String:Any] вместо [String:String]:

ref.child("Resturants").child("Da GiGi").child("pizzas").observeSingleEvent(of:.value, with: {(snapshot) in
    for granchild in (snapshot.children){
        let pizzaSnap = granchild as! DataSnapshot
        let dict = pizzaSnap.value as! [String:Any] //Should no longer get an error

        let nameUse = dict["name"] as? String
        let priceUse = dict["price"] as? Float
        let toppingsUse = dict["toppings"] as? String


    }
}

Если ваша цена фактически сохранялась как String, например "18.49", тогда вы можете привести значение как [String:String]. Но всякий раз, когда в словаре содержится более одного значения, вы захотите, чтобы тип значения словаря был Any, например: [String:Any].

Как видите, мы также приводим нашу цену кнецелое число вместо String, в данном случае Float. Если это приведение не выполнено, попробуйте вместо этого указать цену CGFloat или Double.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...