Swift-参数类型与预期类型不符

时间:2019-11-20 09:35:02

标签: json swift generics decoding codable

我正在尝试在我的Swift应用程序中创建可重用的JSON解码器,但是在运行时遇到以下错误:

  • 参数类型'User.Type'与预期的类型'Decodable'不符
  • 参数类型'User.Type'与预期的类型'Encodable'不符

我的代码如下:

func decode<T: Codable>(_ type: T.Type, from: String) -> [T] {
    let url = URL(fileURLWithPath: from)
    let data = try? Data(contentsOf: url)
    let result = try? JSONDecoder().decode([T].self, from: data!)
    return result!
}
print(decode(User.self, from: "data.json")

谢谢您帮助我解决了这个问题。

最好的问候, NG253

1 个答案:

答案 0 :(得分:0)

如果编译器知道返回类型,则无需将类型作为参数传递

这是我的版本(使用本地字符串)

func decode<T: Decodable>(from: String) throws -> [T] {
    //let url = URL(fileURLWithPath: from)
    //let data = try? Data(contentsOf: url)
    let data = from.data(using: .utf8)!
    return try JSONDecoder().decode([T].self, from: data!)
}

struct User: Decodable {
    let name: String
}

let str = """
   [{"name": "abc"}]
"""

do {
    let users: [User] = try decode(from: str)
} catch {
    print(error)
}