使用协议作为阵列类型和功能参数 swift
我想创建一个可以存储与特定协议对应的对象的类。 对象应存储在键入的阵列中。 根据文件 Swift 协议可以用作类型:
如这种类型,您可以在允许其他类型的许多地方使用该协议,包括:
作为函数,方法或初始化程序中的参数或返回类型的类型
作为一种常量,变量或属性
作为数组中的元素类型,字典或不同的容器
但是,以下导致编译器错误:
协议 'SomeProtocol' 只能用作一般限制,因为它有自己的自身或相关的类型
你是如何解决它的:
如这种类型,您可以在允许其他类型的许多地方使用该协议,包括:
作为函数,方法或初始化程序中的参数或返回类型的类型
作为一种常量,变量或属性
作为数组中的元素类型,字典或不同的容器
但是,以下导致编译器错误:
协议 '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/
}
}
}
没有找到相关结果
已邀请:
7 个回复
小明明
赞同来自:
也可以看看
https://coderoad.ru/24602595/
, 它包含关于如何绕过它的建议,这可能适合您的特定问题。 /您的问题非常一般,也许您可以使用这些答案找到解决方法。/.
江南孤鹜
赞同来自:
, 例如:
</t:>
江南孤鹜
赞同来自:
或者
/和
是其中之一/.
在某些情况下,您可以使用shell可擦除以使您的同性恋收集。 以下是一个例子。
</t:></t:>
董宝中
赞同来自:
我明白它不会用于结构等,但在我的情况下它足够好。
裸奔
赞同来自:
</t:></t:>
快网
赞同来自:
由于无论如何,您需要某种独特的属性来分离您的物体,我建议它 "name". 请确保你的 do element.name = "foo" 创建新副本时 SomeProtocol. 如果未指定名称,则仍然可以创建一个实例,但不会添加到集合中,并且 addElement// 多窝白 "false".
冰洋
赞同来自:
不是
纯净的解决方案 Swift 在这个博客中:
http://blog.inferis.org/blog/2 ... cols/
/
重点是匹配
, 他如何介绍
.
所以而不是使用协议
及其标准使用
您可以编写自己的功能来查找项目并将其删除。
这是您的功能的实现
:
注意:在这种情况下,您对应的对象
, 必须继承自
.