协议作为 Set 的泛型参数
本文最后更新于 2021年4月4日 晚上
协议作为 Swift 中的哈希表(Set)的泛型类型, 一直都是很困惑的一个问题, 这里找到了两种方式来设置协议类型作为 Set 的泛型参数…
很早之前就想探究这个问题了, 实际上看到解决方法有两种.
第一种是使用
AnyHashable
作为 Set 的泛型参数, 然后往里面添加Hashable
类型:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var vcSet: Set<AnyHashable> = []
let p1 = People(name: "er", age: 1, isAlive: true)
let d1 = Dog(color: "green", length: 22.3, isAlive: true)
print(vcSet.insert(p1))
print(vcSet.insert(d1))
protocol Animal: Hashable {
var isAlive: Bool { get }
}
struct People: Animal {
var name: String
var age: Int
var isAlive: Bool
}
struct Dog: Animal {
var color: String
var length: Double
var isAlive: Bool
}另外一种是使用泛型包装类来建立 Set:
1
2
3
4
5
6
7
8
9protocol testProtocol: Hashable {
// 协议内容
}
class test<Elem: testProtocol> {
var s : Set<Elem>?
// ...
}
协议作为 Set 的泛型参数
https://blog.rayy.top/2018/09/09/2019-SetOfProtocol/