问题标签 [swift-protocols]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
15 回答
53876 浏览

swift - 如何使枚举符合 Swift 中的协议?

Swift 文档说classesstructsenums都可以符合协议,我可以达到他们都符合的程度。但是我不能让枚举的行为与结构示例非常相似:

我还没有弄清楚如何通过simpleDescription调用来改变adjust(). 我的示例显然不会这样做,因为getter具有硬编码的值,但是我如何设置simpleDescription同时仍符合的值ExampleProtocol

0 投票
20 回答
198286 浏览

ios - 如何在 Swift 协议中定义可选方法?

斯威夫特有可能吗?如果没有,那么有解决方法吗?

0 投票
7 回答
126456 浏览

swift - 如何在“纯”Swift 中进行弱协议引用(没有@objc)

weak引用似乎在 Swift 中不起作用,除非 aprotocol被声明为@objc,这是我在纯 Swift 应用程序中不想要的。

此代码给出编译错误(weak不能应用于非类类型MyClassDelegate):

我需要在协议前面加上@objc,然后它才能工作。

问题:完成 a 的“纯”Swift 方法是weak delegate什么?

0 投票
8 回答
59769 浏览

swift - Swift - 必须被子类覆盖的类方法

是否有在 Swift 中创建“纯虚函数”的标准方法,即。一个必须被每个子类覆盖的,如果不是,会导致编译时错误?

0 投票
4 回答
2258 浏览

swift - 引用所有 Swift 协议?

Swift 有一个类接口的概念,称为协议。但是,我似乎无法找到 Swift API 中所有可用协议的完整参考。在哪里可以找到所有协议的列表?

0 投票
7 回答
33437 浏览

ios - 在 swift 中使用协议作为数组类型和函数参数

我想创建一个可以存储符合某个协议的对象的类。对象应存储在类型化数组中。根据 Swift 文档协议可以用作类型: 

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

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

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

协议“SomeProtocol”只能用作通用约束,因为它具有 Self 或关联的类型要求

你应该如何解决这个问题:

0 投票
2 回答
50697 浏览

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

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

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

而且我无法确定它的正面或反面。

0 投票
9 回答
31334 浏览

swift - 协议函数返回 Self

我有一个返回对象副本的协议 P:

和一个实现 P 的类 C:

但是,我是否在Self收到以下错误时输入了返回值:

无法将类型“C”的返回表达式转换为返回类型“Self”

我也试过返回C

这导致了以下错误:

非最终类“C”中的方法“copy()”必须返回Self以符合协议“P”

class C除了我以finalie为前缀的情况外,没有任何效果:

但是,如果我想对 C 进行子类化,那么什么都行不通。有没有办法解决?

0 投票
2 回答
35190 浏览

swift - 我可以在协议中有一个初始化函数吗?

当我尝试以这种方式实现我的协议时:

我收到一条错误消息:函数声明中的预期标识符。

为什么我会收到此错误?

0 投票
5 回答
39606 浏览

ios - 在 Swift 中,如何声明符合一个或多个协议的特定类型的变量?

在 Swift 中,我可以通过如下声明来显式设置变量的类型:

如果我们想更进一步并声明一个符合多个协议的变量,我们可以使用protocol声明式:

如果我想声明一个符合一个或多个协议并且也是特定基类类型的对象怎么办?等效的 Objective-C 如下所示:

在 Swift 中,我希望它看起来像这样:

这使我们能够灵活地处理基类型的实现以及协议中定义的添加接口。

我可能会错过另一种更明显的方式吗?

例子

例如,假设我有一家UITableViewCell工厂负责返回符合协议的单元格。我们可以轻松设置一个通用函数,该函数返回符合协议的单元格:

稍后我想将这些单元格出列,同时利用类型和协议

这会返回错误,因为表格视图单元格不符合协议...

我希望能够指定单元格是 aUITableViewCell并符合MyProtocol变量声明中的?

理由

如果您熟悉工厂模式,这在能够返回实现特定接口的特定类的对象的上下文中是有意义的。

就像在我的示例中一样,有时我们喜欢定义在应用于特定对象时有意义的接口。我的表格视图单元格示例就是这样一种理由。

虽然提供的类型不完全符合上述接口,但工厂返回的对象确实如此,因此我希望与基类类型和声明的协议接口进行交互的灵活性