ios – 在Swift中设置和协议

ios – 在Swift中设置和协议,第1张

概述我想使用与Hashable协议和定制协议对应的值初始化一个Set. 我试过了 : protocol CustomProtocol: Hashable {}let set = Set<CustomProtocol>() 但Xcode抱怨: Using ‘CustomProtocol’ as a concrete type conforming to protocol ‘Hashable’ is 我想使用与Hashable协议和定制协议对应的值初始化一个Set.

我试过了 :

protocol CustomProtocol: Hashable {}let set = Set<CustomProtocol>()

但Xcode抱怨:

Using ‘CustomProtocol’ as a concrete type conforming to protocol
‘Hashable’ is not supported

我该如何实现呢?

提前致谢.

解决方法 你不能做你想做的最直接的原因是Hashable是一个通用协议.因此,它 – 或从它派生的协议 – 不能用作集合的元素类型.通用类型只能作为另一个泛型的约束使用.您将注意到您无法声明Set< Hashable>即使一个集合的元素类型必须符合Hashable.

最简单的方法是制作,而不是一组协议,而是一组对象类型.例如,如果S是符合CustomProtocol的结构(因为它符合Hashable加上任何其他CustomProtocol所需),则可以声明一组S.

例:

protocol CustomProtocol: Hashable {}func ==(lhs:S,rhs:S) -> Bool {    return lhs.name == rhs.name}struct S : CustomProtocol {    var name : String    var hashValue : Int { return name.hashValue }}let set = Set<S>()

如果您想要解决的问题是您想要一个混合类型的集合,但是在某种程度上彼此相当,那么这是通过协议扩展解决的同样的问题,如协议中的讨论所解释的 – 面向WWDC 2015视频.

但是,只要使所有类型的类从NSObject派生,这将变得更简单.您仍然可以使它们采用一些辅助协议,当然,但是该集合不会被定义为一组该协议,而是NSObject.

总结

以上是内存溢出为你收集整理的ios – 在Swift中设置和协议全部内容,希望文章能够帮你解决ios – 在Swift中设置和协议所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1096019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存