Swift:协议'Set'只能用作一般约束,因为它具有Self或相关类型要求

问题描述 投票:0回答:1

因此,我正在尝试在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?
}
swift data-structures set swift-protocols abstract-data-type
1个回答
0
投票

您可以如下定义一些类似集合的协议:

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协议如何工作的好习惯。

© www.soinside.com 2019 - 2024. All rights reserved.