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

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

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

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

协议""SomeProtocol""只能用作泛型约束,因为它具有自身或关联的类型要求

你应该怎么解决这个问题:

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)
        }
    }
}

推荐答案

您在SWIFT中遇到了一个协议问题的变体,目前还没有好的解决方案.

另请参阅Extending Array to check if it is sorted in Swift?,它包含可能适合您的特定问题的如何解决它的建议(您的问题非常通用,也许您可以使用这些答案找到解决方法).

Ios相关问答推荐

如何调整包含extView的UICollectionViewListCell的大小?

在SwiftUI中使用系统图像和色调创建圆形按钮

如何使视图完全适合屏幕,而不会在旋转时溢出手机屏幕的边界?

在选项卡内列出导航内视图断开导航标题的动画

底部导航栏在iOS上浮动

带菜单的选取器不适用于Int32,但适用于Int

当应用程序被杀死时是否还能获取位置?

SwiftUI - 搜索栏和导航标题之间的空间太大

在 Android 和 iOS 应用程序上下文中阻止后台线程有哪些缺点?

如何在Swift/Combine中从timer.publish属性传递两个参数到任意方法

NSOperation 有延迟 - 它是异步的还是同步的?

Flutter iOS 构建失败并在 ios/Runner/AppDelegate.swift 中出现多个错误

类型任何视图不能符合具有泛型的协议上的视图

无法同时满足约束 - 没有适当的约束

如何使用情节提要重新排列 UITabBarController 项目?

如何比较两个 UIImage 对象

在 Swift 中上传带参数的图像

如何隐藏uitabbar控制器

使用未知类型创建图像格式是一个错误与 UIImagePickerController

检测应用程序何时进入我的视图背景的最佳方法是什么?