问题标签 [protocol-extension]

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 投票
2 回答
65 浏览

swift - 具有相同通用属性和设置的多个类,如何减少重复代码?

有很多类似的问题,但我很难找到能准确解释我正在寻找的东西

我有多个Services,它处理一个泛型Data类型。他们目前都是半“抽象”类的子类,DataService

这是因为所有这些Services都具有相同的存储属性:

它们init也是一样的:

setup方法也一样


这些类之间的区别在于它们如何处理数据,目前在“抽象”函数中定义

大多数资源都推荐协议和协议扩展。我也更喜欢哪个,但我认为让这变得困难的两件事是:

  1. 试图通过将存储的属性声明保存在一个地方并共享一个init

  2. 类上的泛型类型,通过协议维护它似乎并不简单

但是当前解决方案的问题是

  1. 当我们不希望任何人实际实例化一个实例时,“抽象”类就暴露了
  2. eventReceivedHandler不是编译器强制执行的

这里有正确的解决方案吗?我认为这种架构可能很常见,但我真的一直在努力在网上寻找任何东西,我的搜索查询包含太多过度使用的术语

0 投票
0 回答
193 浏览

ios - 有没有办法在 Swift 中实现一致性后自动调用协议方法?

如果类/结构符合协议,我正在尝试调用协议扩展的方法。

主要原因是不要在各处编写相同的代码来执行一些简单的注册/取消初始化操作。

如果任何类或结构符合协议,我希望自动调用 addLanguageChangeObserver。Swift编程语言有可能吗?

0 投票
2 回答
126 浏览

arrays - Swift:扩展关联类型为数组的协议

我正在尝试创建一个适用于数组的 Rx 运算符。我试过这个简单的扩展:

现在,我已经注意到Array<Any>,否则我会得到 Reference to generic type 'Array' requires arguments in <...>,但是这样返回值当然是Observable<Any>

Element甚至可以用数组的实际值返回一个 observable吗?

0 投票
1 回答
60 浏览

swift - Swift Extension 计算变量在协议中声明之前无法正确读取

我有一个协议扩展,它声明并分配一个静态计算变量:

然后我有另一个名为 Providerassociatedtype的协议,它需要 DataType 协议和扩展:

然后我创建以下符合 DataType 和 Provider 的类型:

当我打印出这个(一个空数组[])时,CarProvider静态变量mock会打印出mocksDataType 变量的默认值——即使在其结构定义Car中有一个分配的数组值mocks

但是,只要我将协议mocks内的属性声明DataType为要求,就会正确读取 的mocksCar(打印正确的值:)[__lldb_expr_93.Car(name: "Nissan"), __lldb_expr_93.Car(name: "Toyota")]

为什么协议定义中首先需要属性定义?扩展值不应该足够吗?而且由于Car结构将自己的值分配给mocks变量,不应该读取它而不是默认扩展值吗?

0 投票
1 回答
30 浏览

swiftui - 这是将属性标识为“@Published”的适当协议约束

我想为集合中的对象建立绑定,以便可以像引用指针一样将其传递给下游。我希望这是一个方便的功能,但我遇到了一些麻烦。

如果有的话,我可以使用以下协议“Diskable”来消除我遇到的错误吗?

0 投票
1 回答
266 浏览

swift - 我如何对协议及其扩展进行单元测试

我有一个协议,我在扩展中有它的定义。

我想对定义进行单元测试。

我用谷歌搜索,但我找不到任何相关的东西。

我得到的最接近的是 Mocking with Protocol 或 POP 等。

如果有人可以用样本解释我,那就太好了。

0 投票
2 回答
68 浏览

swift - 具有特定 Self 类型的 Swift 协议扩展

我为 UnsignedInteger 协议添加了一个扩展,以添加一个以十六进制格式表示数字的十六进制方法。我还希望特定的符合结构具有参数的默认值。我写的是下面的。

但是,对于 UInt8 和 UInt16 特定的扩展,它似乎是在调用自身而不是第一个扩展块中的十六进制,正如我收到的 UInt8 和 UInt16 块的警告消息所解释的那样All paths through this function will call itself

如果我fieldWidh从 UInt8 和 UInt16 块中删除 ,调用十六进制(带有硬编码值fieldWidth)似乎编译得很好,我相信这样它是从第一个扩展块调用十六进制方法。下面是编译良好的代码。

在进行协议扩展时,有没有办法为特定的符合结构的参数指定默认值?

0 投票
1 回答
42 浏览

arrays - 在 Swift 中对数值数组求和的计算属性

书中的任务说:不调用 reduce(_: _:) 方法,通过添加一个名为 sum 的计算属性来对数字序列求和。您应该可以像这样使用它:

作者提示:在开发人员文档中检查 Int 和 Double 符合哪些协议,以及这些协议从哪些协议继承。在下面的代码中,我只是结合了我找到的两个解决方案,但它仍然包含方法 reduce。如果您可以帮助我了解如何解决此问题/开发人员文档的哪一部分提供了线索。另外,如何避免当前代码中的错误/在封闭范围内应用可能的解决方案。