问题标签 [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.
swift - 具有相同通用属性和设置的多个类,如何减少重复代码?
有很多类似的问题,但我很难找到能准确解释我正在寻找的东西
我有多个Services
,它处理一个泛型Data
类型。他们目前都是半“抽象”类的子类,DataService
这是因为所有这些Services
都具有相同的存储属性:
它们init
也是一样的:
setup
方法也一样
这些类之间的区别在于它们如何处理数据,目前在“抽象”函数中定义
大多数资源都推荐协议和协议扩展。我也更喜欢哪个,但我认为让这变得困难的两件事是:
试图通过将存储的属性声明保存在一个地方并共享一个
init
类上的泛型类型,通过协议维护它似乎并不简单
但是当前解决方案的问题是
- 当我们不希望任何人实际实例化一个实例时,“抽象”类就暴露了
eventReceivedHandler
不是编译器强制执行的
这里有正确的解决方案吗?我认为这种架构可能很常见,但我真的一直在努力在网上寻找任何东西,我的搜索查询包含太多过度使用的术语
ios - 有没有办法在 Swift 中实现一致性后自动调用协议方法?
如果类/结构符合协议,我正在尝试调用协议扩展的方法。
主要原因是不要在各处编写相同的代码来执行一些简单的注册/取消初始化操作。
如果任何类或结构符合协议,我希望自动调用 addLanguageChangeObserver。Swift编程语言有可能吗?
arrays - Swift:扩展关联类型为数组的协议
我正在尝试创建一个适用于数组的 Rx 运算符。我试过这个简单的扩展:
现在,我已经注意到Array<Any>
,否则我会得到
Reference to generic type 'Array' requires arguments in <...>
,但是这样返回值当然是Observable<Any>
。
Element
甚至可以用数组的实际值返回一个 observable吗?
swift - Swift Extension 计算变量在协议中声明之前无法正确读取
我有一个协议扩展,它声明并分配一个静态计算变量:
然后我有另一个名为 Providerassociatedtype
的协议,它需要 DataType 协议和扩展:
然后我创建以下符合 DataType 和 Provider 的类型:
当我打印出这个(一个空数组[]
)时,CarProvider
静态变量mock
会打印出mocks
DataType 变量的默认值——即使在其结构定义Car
中有一个分配的数组值mocks
但是,只要我将协议mocks
内的属性声明DataType
为要求,就会正确读取 的mocks
值Car
(打印正确的值:)[__lldb_expr_93.Car(name: "Nissan"), __lldb_expr_93.Car(name: "Toyota")]
:
为什么协议定义中首先需要属性定义?扩展值不应该足够吗?而且由于Car
结构将自己的值分配给mocks
变量,不应该读取它而不是默认扩展值吗?
swiftui - 这是将属性标识为“@Published”的适当协议约束
我想为集合中的对象建立绑定,以便可以像引用指针一样将其传递给下游。我希望这是一个方便的功能,但我遇到了一些麻烦。
如果有的话,我可以使用以下协议“Diskable”来消除我遇到的错误吗?
swift - 我如何对协议及其扩展进行单元测试
我有一个协议,我在扩展中有它的定义。
我想对定义进行单元测试。
我用谷歌搜索,但我找不到任何相关的东西。
我得到的最接近的是 Mocking with Protocol 或 POP 等。
如果有人可以用样本解释我,那就太好了。
swift - 具有特定 Self 类型的 Swift 协议扩展
我为 UnsignedInteger 协议添加了一个扩展,以添加一个以十六进制格式表示数字的十六进制方法。我还希望特定的符合结构具有参数的默认值。我写的是下面的。
但是,对于 UInt8 和 UInt16 特定的扩展,它似乎是在调用自身而不是第一个扩展块中的十六进制,正如我收到的 UInt8 和 UInt16 块的警告消息所解释的那样All paths through this function will call itself
:
如果我fieldWidh
从 UInt8 和 UInt16 块中删除 ,调用十六进制(带有硬编码值fieldWidth
)似乎编译得很好,我相信这样它是从第一个扩展块调用十六进制方法。下面是编译良好的代码。
在进行协议扩展时,有没有办法为特定的符合结构的参数指定默认值?
arrays - 在 Swift 中对数值数组求和的计算属性
书中的任务说:不调用 reduce(_: _:) 方法,通过添加一个名为 sum 的计算属性来对数字序列求和。您应该可以像这样使用它:
作者提示:在开发人员文档中检查 Int 和 Double 符合哪些协议,以及这些协议从哪些协议继承。在下面的代码中,我只是结合了我找到的两个解决方案,但它仍然包含方法 reduce。如果您可以帮助我了解如何解决此问题/开发人员文档的哪一部分提供了线索。另外,如何避免当前代码中的错误/在封闭范围内应用可能的解决方案。