web-dev-qa-db-ja.com

Swift 4:Codableで `汎用パラメーター 'T'を推測できませんでした`

次のエラーが表示されます。

_Generic parameter 'T' could not be inferred_

オンライン:let data = try encoder.encode(obj)

ここにコードがあります

_import Foundation

struct User: Codable {
    var firstName: String
    var lastName: String
}

let u1 = User(firstName: "Ann", lastName: "A")
let u2 = User(firstName: "Ben", lastName: "B")
let u3 = User(firstName: "Charlie", lastName: "C")
let u4 = User(firstName: "David", lastName: "D")

let a = [u1, u2, u3, u4]

var ret = [[String: Any]]()
for i in 0..<a.count {
        let param = [
            "a" : a[i],
            "b" : 45
            ] as [String : Any]
    ret.append(param)
}


let obj = ["obj": ret]

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(obj) // This line produces an error
print(String(data: data, encoding: .utf8)!)
_

何が間違っていますか?

12
user1107173

そのメッセージは誤解を招くものであり、実際のエラーはobjのタイプが[String: Any]Codableは準拠していないため、Anyに準拠していません。

考えてみると、AnyCodableに準拠することはできません。 JSONエンティティを整数、文字列、またはオブジェクトにできる場合、Swiftを使用して保存しますか?データを保持する適切な構造体を定義する必要があります。

33
Code Different