0

オブジェクト内の Double は、別のオブジェクトに追加されると、文字列に変換されます (または単に引用符に入れられます)。私はこの動作をしたくありません。データベース ルールが完全に機能するように、double を double のままにしたい

var list: [String: AnyObject] = [:]

var obj: [String: Any] = [:]
obj["pi"] = 3.14
obj["test"] = "hello"

list["firstObj"] = obj as AnyObject

print(list)

結果は次のとおりです。

["firstObj": { pi = "3.14"; test = hello; }]

これ欲しい

["firstObj": { pi = 3.14; test = hello; }]

望ましい結果を達成するために何ができるかを提案してください

注: このコードをプレイグラウンドで実行して確認できます。

編集済み

問題はまだ解決されていません。回答に従った後、モデルを作成してfirebaseに投稿しました。今、これは私が見返りに得る例外です

'InvalidFirebaseData'、理由: '(setValue:withCompletionBlock:) cardCost で _SwiftValue 型のオブジェクトを格納できません。タイプ NSNumber、NSString、NSDictionary、および NSArray のオブジェクトのみを格納できます。

firebaseで読めるようにしたい

4

2 に答える 2

2

obj["pi"] ですDouble。_ これは次のようにテストできます…</p>

var list: [String: Any] = [:]
var obj: [String: Any] = [:]
obj["pi"] = 3.14
obj["test"] = "hello"    
list["firstObj"] = obj as Any

func printTypesFor(dict: [String: Any]) {
    for (key, value) in dict {
        print(key + " is a " + "\(type(of: value))")
        if let valueDict = value as? [String: Any] {
            printTypesFor(dict: valueDict)
        }
    }
}

printTypesFor(dict: list)


firstObj is a Dictionary<String, Any>
test is a String
pi is a Double
于 2018-04-25T10:02:04.630 に答える