当前位置: 首页 > 面试题库 >

“ Protocol…只能用作通用约束,因为它具有Self或关联的类型要求”是什么意思?

支淮晨
2023-03-14
问题内容

我正在尝试创建一个字典(实际上是HashSet),该字典以Swift中的自定义协议为键,但是它给了我标题错误:

协议“ myProtocol”只能用作通用约束,因为它具有“自我”或相关类型要求

而且我不能做它的正面或反面。

protocol Observing: Hashable { }

var observers = HashSet<Observing>()

问题答案:

协议Observing从协议继承Hashable,而协议又从协议继承Equatable。协议Equatable具有以下要求:

func ==(lhs: Self, rhs: Self) -> Bool

并且包含Self在其中某处的协议只能在类型约束中使用,而不能在任何地方使用。

这是一个类似的问题。



 类似资料:
  • 问题内容: 我有一个协议RequestType,它具有如下的relatedType模型。 现在,我试图对所有失败的请求进行排队。 但是我在线上看到错误,因为Protocol RequestType具有Self或associatedType要求,因此只能用作通用约束。 问题答案: 现在假设我们调整您的协议以添加一个使用关联类型的例程: Swift可以让您按照自己的方式创建数组。我可以将这些请求类型的

  • 这是SWIFT中的有效协议声明: 但这不是: 错误消息为: 协议“proto2”只能用作泛型约束,因为它具有自身或关联的类型要求 因此,当使用作为函数的返回类型时,Swift并不认为这是所定义协议的约束,因此可以使用协议本身作为函数的返回类型。但是当使用作为函数的参数类型时,其行为是完全不同的。 我想知道为什么会有这样的差别?

  • 我在函数中有以下代码: 现在我不知道为什么这不起作用。Gcc说:“错误:'asm'操作数有不可能的约束”我一直在学习Gcc内联汇编教程,我认为这是将参数从c代码带到内联汇编块的正确方法。 我还使用了为32位x86构建的gcc交叉编译器。

  • 可能重复: 是否可能将可空类型作为泛型参数? 我遇到了一个关于泛型类型约束的非常奇怪的事情。我有一门课是这样的: 但是,我发现我不能像预期的那样使用null类型: 我得到一个错误,必须是引用类型。Nullable真的只是一个语法糖的结构,使其看起来像引用类型吗?

  • 我试图编写一个通用的getter函数,给定一个键,该键应该只返回类型字符串| boolean | number。因此,默认值应与返回值的类型相同 这是我尝试过的。 我得到这个错误,不确定是什么错误。 什么可能是“字符串|数字|布尔”的子类型让我感到困惑。它们不是已经是基本类型了吗?

  • 现在还有另一种可能的使用方法,我不太明白 这个函数可以很容易地接受任何可转换为a的类型。这很奇怪,因为第一个模板参数(“from”)基本上被删除,并在函数调用时推导出来。下面的函数也可以工作,我很肯定它实际上与前面的函数等效 同样,的类型是在调用时推导出来的。