我想创建一个类,可以存储符合特定协议的对象。对象应存储在类型数组中。根据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中遇到了协议问题的一个变体,目前尚无好的解决方案。
另请参见扩展数组以检查它是否在Swift中排序?,其中包含有关如何解决该问题的建议,这些建议可能适合您的特定问题(您的问题非常笼统,也许您可以使用这些答案找到解决方法)。
问题内容: 在Objective- C中,可以将符合协议的类指定为方法参数。例如,我可以有一个只允许符合的方法: 我找不到在Swift中执行此操作的方法(也许尚不可能)。您可以使用来指定多种协议,但是您又如何要求该对象属于特定类呢? 问题答案: 您可以将其定义为通用函数,并使用类型约束来同时要求类和协议。 斯威夫特4 Swift 3 (也适用于Swift 4) 迅捷2
问题内容: 我想让一个函数在Swift中接受任何数字(Int,Float,Double,…) 不使用NSNumber 问题答案: 更新: 以下答案原则上仍然适用,但是Swift 4完成了数字协议的重新设计,因此通常不需要添加自己的数字协议。在构建自己的系统之前,请查看标准库的数字协议。 在Swift中,这实际上是不可能的。为此,您需要创建一个新协议,并使用您将在泛型函数中使用的任何方法和运算符进行
我必须将一个协议作为参数传递给一个函数。协议是泛型的,具有关联的类型。我找不到一个好办法。 我想要实现的基本上是在JSON中存储一个键值对。所以我有一个通用的数据类型协议,它设置/获取值(根据数据类型设置和获取) 在另一个协议中,我希望将这个泛型数据类型协议作为函数参数传递。 在下面的代码中,我得到的协议“dataType”只能用作泛型约束,因为它有自身或关联的类型要求
问题内容: 我在编写以下函数作为闭包时遇到麻烦 我试过了 但这不起作用。 有什么建议? 问题答案: 我相信您要的东西没有任何意义(与Swift无关)。尽管我有兴趣证明自己是错误的,但我不认为可以用任何强类型语言合理地创建它。(编辑:继续我的研究,我相信使用一流的多态性的语言是可行的,但我不知道实际上有此功能的任何通用语言。) 您希望是哪种类型?泛型创建抽象类型。除非专业化,否则它不会成为真实类型。
问题内容: ./chains.go:26:10:不能在作业中使用UpperCaseHandler(typefunc(asl.MessageDelivery))作为asl.MessageHandler类型./chains.go:37:86:无法使用RepeatHandler(类型func(asl.MessageDelivery))与Repeater.ConsumeFunc的参数中的asl.Messa
我想使用泛型类作为另一个泛型类的类型参数。 起初,我对类的定义是这样的: 然后我的需求发生了变化,我不得不为我的R类型使用包装器/持有者类 到目前为止,我的尝试:(给出编译时错误: