相关疑难解决方法(0)

议定书不符合自己的要求?

为什么这个Swift代码没有编译?

protocol P { }
struct S: P { }

let arr:[P] = [ S() ]

extension Array where Element : P {
    func test<T>() -> [T] {
        return []
    }
}

let result : [S] = arr.test()
Run Code Online (Sandbox Code Playgroud)

编译器说:"类型P不符合协议P"(或者,在Swift的更高版本中,"不支持使用'P'作为符合协议'P'的具体类型.").

为什么不?不知怎的,这感觉就像语言中的漏洞.我意识到问题源于将数组声明arr协议类型的数组,但这是不合理的事情吗?我认为协议正是为了帮助提供类似层次结构的结构?

generics swift swift-protocols

117
推荐指数
3
解决办法
1万
查看次数

在Swift 4中使用JSONEncoder将[String:Encodable]字典编码为JSON

我只是很好奇如何将具有String键和Encodable值的字典编码为JSON。

例如:

let dict: [String: Encodable] = [
    "Int": 1,
    "Double": 3.14,
    "Bool": false,
    "String": "test"
]
Run Code Online (Sandbox Code Playgroud)

其中的键dict都是type String,但是值的类型各不相同。

但是,JSON中允许所有这些类型。

我想知道JSONEncoder在Swift 4中是否有一种方法可以将其编码dict为JSON Data

我确实知道还有其他方法无法使用JSONEncoder,但是我只是想知道是否JSONEncoder有能力进行管理。

Dictionary确实有func encode(to encoder: Encoder) throws在扩展,但仅适用于约束Key: Encodable, Key: Hashable, Value: Encodable,而对于我们dict,它需要约束Key: Encodable, Key: Hashable, Value == Encodable

struct为此拥有一个就足够了JSONEncoder

struct Test: Encodable {
    let int = 1
    let double …
Run Code Online (Sandbox Code Playgroud)

dictionary swift4 encodable jsonencoder

2
推荐指数
1
解决办法
1382
查看次数