Swift: Protocol 'Set' 只能用作泛型约束,因为它有 Self 或关联类型要求
Swift: Protocol 'Set' can only be used as a generic constraint because it has Self or associated type requirements
因此,我尝试在 Swift 上实现一个 Set ADT 版本作为实践,当我尝试实现 Set 接口(或 swift 中的协议)时,我得到了以下错误:"Protocol 'Set' can only be used as a generic constraint because it has Self or associated type requirements"。这是我到目前为止编码的内容:
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?
}
你可以定义一些类似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 协议在某些情况下可能不像 interface 在某些其他面向对象语言中那样工作。
你说这个作为练习,那么这可以成为学习Swift协议如何工作的好练习。
因此,我尝试在 Swift 上实现一个 Set ADT 版本作为实践,当我尝试实现 Set 接口(或 swift 中的协议)时,我得到了以下错误:"Protocol 'Set' can only be used as a generic constraint because it has Self or associated type requirements"。这是我到目前为止编码的内容:
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?
}
你可以定义一些类似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 协议在某些情况下可能不像 interface 在某些其他面向对象语言中那样工作。
你说这个作为练习,那么这可以成为学习Swift协议如何工作的好练习。