给定尺寸为夫特型
在夫特套,有一个方法来构造一个类型的“集的给定尺寸的?”(尽管在夫特没有依赖性类型的,是这样的结构仍然可能没有过多的“扭曲?”)给定尺寸为夫特型
作为一个例子,我希望能够定义一个参数化类型SetOfSizeTwo<T>
,它的实例是由(Hashable
)类型T
正好两个对象组成的集合。
目前,我使用的是穷人的代理:
struct SetOfSizeTwo<T> where T: Hashable { var set = Set<T>(minimumCapacity: 2)
}
然而,这种类型不会强制属性set
到是2
大小的更新
的博客文章A hack for fixed-size arrays in Swift,由Ole Begemann引导,我相信如果可能的话,在Swift 4中构建一个固定大小的类型是非常重要的。
回答:
下面是一种方法,尽可能接近我的需求,以满足您的需求。这是周围的边缘有点粗糙,需要一些抛光,但我想你会明白我的意思:
class Size { let size: Int
init(size: Int) {
self.size = size
}
required init() {
self.size = 0
}
}
class SizeOne: Size {
private override init(size: Int) {
super.init(size: size)
}
required init() {
super.init(size: 1)
}
}
class SizedSet<S, T> where S: Size, T: Hashable {
private var set: Set<T>
private let maximumSize: S
init() {
set = Set<T>()
maximumSize = S()
}
func insert(item: T) {
if !set.contains(item) && set.count + 1 <= maximumSize.size {
set.insert(item)
}
}
func remove(item: T) {
set.remove(item)
}
func contents() -> Set<T> {
return set
}
}
用法:
let set: SizedSet<SizeOne, Int> = SizedSet() print(set.contents())
// []
set.insert(item: 1)
print(set.contents())
// [1]
set.insert(item: 2)
print(set.contents())
// [1]
以上是 给定尺寸为夫特型 的全部内容, 来源链接: utcz.com/qa/261189.html