给定尺寸为夫特型

在夫特套,有一个方法来构造一个类型的“集的给定尺寸的?”(尽管在夫特没有依赖性类型的,是这样的结构仍然可能没有过多的“扭曲?”)给定尺寸为夫特型

作为一个例子,我希望能够定义一个参数化类型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

回到顶部