问题标签 [protocol-inheritance]

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 投票
1 回答
1373 浏览

swift - 如何使协议关联类型需要协议继承而不是协议采用

在我的 swift 项目中,我有一个使用协议继承的情况,如下所示

我接下来要实现的是声明另一个具有关联类型的协议,该类型必须继承自协议A。如果我尝试将其声明为:

AnotherProtocol它编译时没有错误,但在以下情况下尝试采用时:

编译失败,错误声明SomeClass不符合AnotherProtocol. 如果我理解正确,这意味着在我尝试声明并询问您如何声明从协议继承的关联类型时B 不采用?AA

我基于以下场景编译得很好的事实做出了上述假设

0 投票
2 回答
272 浏览

ios - 协议继承问题

我尝试建立各种协同工作的协议。不幸的是,我不能让它们按我想要的方式工作。看下面的代码,我想我的目标很明显:我想要一个符合协议 X 的类。如果它符合协议 Y,但协议 Y 继承自协议 X,它也应该被接受为符合协议的类. 相反,我收到以下编译错误

Unable to infer associated type 'VC' for protocol 'ViewModelType'

Inferred type 'ExampleViewControllerType' (by matching requirement 'viewController') is invalid: does not conform to 'ViewType'

当前设置:

0 投票
1 回答
543 浏览

swift - 如何在 Swift 中传递需要超级协议类型的子协议类型?(考虑为基类类型传递子类类型,但为协议传递)

我被困在 Swift 中的协议继承问题上。我正在尝试构建一个接受协议类型 X 数组的 API。该 API 的使用者应该能够传入任何类型的协议类型 X 或任何从协议 X 继承的子协议类型 X'。看起来这可以- 如果没有某种形式的显式将协议类型 X' 转换回协议类型 X,就无法在 Swift 中实现。为什么会这样?我没有看到类类型的这种行为(我怀疑可能是因为继承的工作方式明显不同)。

这是我的代码:

正如您在上面的函数 serviceDependencies() 中看到的那样,我必须将子协议类型转换回其超级协议类型。如果我删除演员表,我会收到一个编译器警告,明确要求我这样做。

有没有办法避免这种情况?我喜欢它可以为你解决的类类型。我真的很想避免这个转换问题,因为它会使使用 API 变得非常笨拙。谢谢!

0 投票
1 回答
42 浏览

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

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

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