因此,我正在尝试在Swift上实现Set ADT的版本,当我尝试实现Set接口(或swift中的协议)时,出现以下错误:“协议'Set'只能是用作通用约束,因为它具有“自我”或关联的类型要求”。这是到目前为止我得到的编码:
public protocol Set{
associatedtype E
func add(elm : E)
func remove(elm : E) -> Bool
func clear()
func isMember(elm : E) -> Bool
func size() -> Int
func isEmpty() -> Int
func isSubset(S2 : Set) -> Bool
func union(S2 : Set) -> Set?
func intersection(S2 : Set) -> Set?
func difference(S2 : Set) -> Set?
}
您可以如下定义一些类似集合的协议:
public protocol MySet{
associatedtype Element
func add(elm : Element)
func remove(elm : Element) -> Bool
func clear()
func isMember(elm : Element) -> Bool
func size() -> Int
func isEmpty() -> Int
func isSubset(S2 : Self) -> Bool
func union(S2 : Self) -> Self?
func intersection(S2 : Self) -> Self?
func difference(S2 : Self) -> Self?
}
但是我不确定它是否可以像您期望的那样用作ADT。正如在错误消息中一样,在Swift中,您会获得具有关联类型(或具有Self
)的协议只能用作通用约束。
在某些情况下,某些其他面向对象的语言,快速协议可能无法像接口一样工作。
您这样说[[按惯例,那么这可能是学习Swift协议如何工作的好习惯。