在Swift中实现Set.addSequence [英] Implementing Set.addSequence in Swift

查看:104
本文介绍了在Swift中实现Set.addSequence的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Swift中实现了一个使用Dictionary键的Set。我想实现一个addAll(sequence)方法,它可以在Set中的元素上使用任何序列类型,但是我得到一个没有道理的错误。这是我的代码

  struct Set< Element:Hashable> {元素:Bool]()
$ b $元素{元素:[元素] = []){$ b $元素中的元素{
self。 hash [element] = true
}
}

var array:[Element] {
return hash.keys.array
}

func包含(element:Element) - > Bool {
return hash [element] ?? false


mutating func add(element:Element){
hash [element] = true
}

mutating func add( array:[元素]){
用于数组中的元素{
hash [元素] = true
}
}

mutating func add< S: SequenceType其中S.Generator.Element ==元素>(序列:S){
用于元素的顺序{//错误在这里:无法将表达式的类型'S'转换为类型'S'
hash [element] = true
}
}

mutating func remove(element:Element){
hash [element] = nil
}
}

在XCode 6.1和6.0.1中出现这个错误。



我想遵循Array的扩展方法的语义,但是这种类型签名甚至没有为我编译。



我是做错了什么,或者我应该提交一份雷达?



编辑
刚刚找到 https://github.com/robrix/Set/blob/master /Set/Set.swift ,它有这个实现:

  public mutating func extend< S:SequenceType其中S .Generator.Element == Element>(sequence:S){
//注意,这只适用于每个序列;这是围绕着一个编译器问题。
insert(each)
}
}

但是,它只是将 sequence 转换为 Array ,这种类型的打破了 SequenceType 的目的。 更新:这已经在Swift 1.2(Xcode 6.3 beta 3)中修复,原始版本来自问题的代码编译没有错误。 (另外,定义
a自定义类型不再是必要的,因为Swift 1.2有
a原生 Set 类型的内置。)






老回答:对我来说这看起来像一个bug,但也许有人可以解释它。 b
$ b

可能的解决方法:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆