前提・実現したいこと
NSDictionaryとして取得したデータの中にある数値をInt型として別変数に代入したいです。
試したこと
たとえば、valueのfirstという項目に数値"10"が格納されていたとします。
それをelementにInt型として代入する場合以下のように記載すると思います。しかし、「→」の部分のエラーが生じます。
let value = dataList.value as? NSDictionary let element = value?["first"] as? Int → error: Cannot assign value of type 'Int?' to type 'String?' let element = Int(value?["first"]) → error: Cannot invoke initializer for type 'Int' with an argument list of type '(Any?)'
以下のようにすることでoptional型にはできましたが、アンラップ時にエラーがで解決に至りませんでした。
let element = value?["first"] as? String print(element) // optional(10) let num = Int(element!) → error: Cannot assign value of type 'Int?' to type 'String?'
[追記]
実際に用いたデータは以下のような構成になっています。
root |--user : |-- name: 山田太郎 : |-- nameKana: ヤマダタロウ |-- admissionYear: 26 |-- grade: 3 |-- sex: 男 |-- undergraduate: 理学部
import UIKit import Firebase class infoController: UIViewController { @IBOutlet weak var gradeLabel: UILabel! let DB = Database.database().reference() override func viewDidLoad() { super.viewDidLoad() DB.child("user").observe(.value, with: {(snapshot) in let value = snapshot.value as? NSDictionary self.gradeLabel.text = Int(value?["grade"]) // ここでエラーが生じます。gradeLabelで「3」と表示させたいです。 }) } }
補足情報(FW/ツールのバージョンなど)
言語: Swift
実行環境: Xcode
おそらくここに書き写したものが間違えています。もう一度確認してください。 ご提示のコードでは value?["first"] はエラーになります。
ご指摘の通り、valueの定義部分で「as!」となっていたので「as?」に訂正いたしました。
dataListやdataList.valueにはどういった値が入っていますでしょうか?ご質問の内容のように["first": 10]のようなNSDictionaryの値だとしたらlet element = value?["first"] as? Stringはnilになるはずで、["first": "10"]だとしたらうまくいくような気がします。(私の環境だと上手くいきました)
実際に使用したのがfirebaseなので、どのように格納されているのか当方では確認できませんでした。そのため、再度コードを追記致しました。よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー