相关疑难解决方法(0)

如何在Codable类型中使用Any

我目前正在处理Codable项目中的类型并遇到问题.

struct Person: Codable
{
    var id: Any
}
Run Code Online (Sandbox Code Playgroud)

id在上面的代码中可以是a String或an Int.这就是id类型的原因Any.

我知道Any不是Codable.

我需要知道的是我如何才能使它发挥作用.

ios swift codable decodable encodable

18
推荐指数
5
解决办法
1万
查看次数

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], …
Run Code Online (Sandbox Code Playgroud)

encoder swift swift4 xcode9 codable

12
推荐指数
1
解决办法
6929
查看次数

如何在Swift中表示通用的JSON结构?

我想在Swift中表示一个通用的JSON对象:

let foo: [String: Any] = [
    "foo": 1,
    "bar": "baz",
]
Run Code Online (Sandbox Code Playgroud)

[String: Any]编译器建议的类型并不能很好地工作.我无法检查该类型的两个实例是否相等,例如,虽然这应该可以使用两个JSON树.

什么也行不通的是使用Codable机器将该值编码为JSON字符串:

let encoded = try JSONEncoder().encode(foo)
Run Code Online (Sandbox Code Playgroud)

哪个因错误而爆炸:

fatal error: Dictionary<String, Any> does not conform to Encodable because Any does not conform to Encodable.
Run Code Online (Sandbox Code Playgroud)

我知道我可以引入一个精确的类型,但我遵循通用的JSON结构.我甚至尝试为泛型JSON引入一种特定类型:

enum JSON {
    case string(String)
    case number(Float)
    case object([String:JSON])
    case array([JSON])
    case bool(Bool)
    case null
}
Run Code Online (Sandbox Code Playgroud)

但是当实现Codable这个枚举时我不知道如何实现encode(to:),因为一个键控容器(用于编码对象)需要一个特定的CodingKey参数,我不知道如何得到它.

是否真的不可能创建一个Equatable通用的JSON树并使用它编码Codable

json types swift codable

5
推荐指数
1
解决办法
1607
查看次数

标签 统计

codable ×3

swift ×3

decodable ×1

encodable ×1

encoder ×1

ios ×1

json ×1

swift4 ×1

types ×1

xcode9 ×1