相关疑难解决方法(0)

在swift中使用协议作为数组类型和函数参数

我想创建一个可以存储符合特定协议的对象的类.对象应存储在类型化数组中.根据Swift文档协议可以用作类型: 

因为它是一种类型,所以您可以在允许其他类型的许多地方使用协议,包括:

  • 作为函数,方法或初始值设定项中的参数类型或返回类型
  • 作为常量,变量或属性的类型
  • 作为数组,字典或其他容器中的项类型

但是,以下生成编译器错误:

协议'SomeProtocol'只能用作通用约束,因为它具有Self或相关类型要求

你怎么解决这个问题:

protocol SomeProtocol: Equatable {
    func bla()
}

class SomeClass {

    var protocols = [SomeProtocol]()

    func addElement(element: SomeProtocol) {
        self.protocols.append(element)
    }

    func removeElement(element: SomeProtocol) {
        if let index = find(self.protocols, element) {
            self.protocols.removeAtIndex(index)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

generics ios swift swift-protocols

130
推荐指数
6
解决办法
2万
查看次数

标签 统计

generics ×1

ios ×1

swift ×1

swift-protocols ×1