问题标签 [protocol-oriented]

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 回答
530 浏览

python - 如何让 Mypy 在 Callable 中识别类的协议成员资格?

当协议用作类型注释函数的简单参数时,Mypy 可以正确识别类对协议的遵守情况。但是,当我有一个需要使用该协议的可调用参数的函数时,Mypy 会错过用户类的协议成员资格。

我是在滥用 Mypy 的协议模式,还是 Mypy 目前根本不支持这种模式?

(我已经看到有关 Mypy 在分配给一个类的 Callables 方面遇到问题的线程......所以这可能是一个已知的行为)

0 投票
1 回答
43 浏览

swift - 使用 Swift 协议和扩展覆盖对象方法

我想覆盖在框架中声明并在扩展中实现的方法。

这是我尝试过的:

这将打印:

但我想覆盖该方法,以便打印:

是否可以覆盖在扩展中实现的方法?

0 投票
0 回答
137 浏览

swift - 为什么不能符合关联类型的协议?

我有以下简单的协议:

函数parse采用 simple Responsewhich is struct 并采用Twhich is Codable。以下是我实现此协议的方式:

似乎一切都好。但是 Xcode 说它不符合协议。这里AuthResult<T>只是为了案例:

我无法弄清楚我的实施有什么问题。我想使用泛型函数,而不是泛型结构。

0 投票
2 回答
233 浏览

ios - swift iOS中的面向协议编程

这是Protocols

WireFrameProtocol将具有所有路由功能。HomeWireFrameProtocol将扩展并仅具有一些与家庭相关的路由。测试类继承自HomeInteractorProtocol,它有一个 var wireFrame: HomeWireFrameProtocol,再次HomeWireFrameProtocol扩展WireFrameProtocol

是否var wireFrame: HomeWireFrameProtocol也代表var wireFrame: WireFrameProtocol

0 投票
1 回答
42 浏览

swift - Swift 面向协议编程一种协议继承其他协议,其中一种实现方法

我有这样的协议

其中 IRouter 应该继承或符合 Requestable 和 Encoder 协议

MultipartUploading 是另一个具有默认实现的协议

然后我将默认实现添加到 Requestable 如果它也是 IRouter

以及 MultipartUploading 协议的另一种实现

但是如果我将模块导入应用程序目标并执行

它不包含这个 multipartFormData 和 asUrlRequest 实现,让我再次实现它们?如何避免这种情况并具有此默认实现。似乎如果我在同一个模块(目标)中执行此操作,那么 Router: IRouter 不会抱怨,但也许只是 Xcode 没有检测到错误

0 投票
2 回答
72 浏览

swift - 无法为数组参数扩展约束协议

我将通过一个例子来解释它。我们有一个强制拥有firstNamelastName喜欢的协议:

我们将要使用的类型有这两个,但是是可选的形式:

所以在符合 之后ProfileRepresentable,我们将扩展ProfileRepresentable并尝试返回值和nil状态的默认值:

到目前为止,一切都很好

现在对于s列表也有类似的流程Profile

首要问题

符合ProfilerRepresentable不会按预期自动完成实现(因为Profile已经符合ProfileRepresentable

第二期

按照之前的模式,扩展ProfilerRepresentable没有按预期工作,它会引发警告:

⚠️ 通过这个函数的所有路径都会调用自己

顺便说一句,我怎样才能实现数组的目标?

0 投票
1 回答
83 浏览

ios - 如何在 swift 中使基类属性通用,以便与多种模型类型一起使用?

我希望属性“cellViewModel”是通用的,这样我就可以将 BaseCustomCell 与不同类型的模型一起使用。前任。

//这就是我从 cellForRowAtIndexPath 方法设置的方式:

现在,我每次都为不同类型的 cellViewModel 创建新的 BaseCustomCell。您能提供任何解决方案吗?

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 投票
0 回答
30 浏览

ios - SwiftUI:使用协议定义视图外观

作为 SwiftUI 的新手,我已经看到所有 UI 组件现在都是协议或结构。

我喜欢协议的地方在于我可以在不需要继承的情况下组合它们,这与面向对象编程不同。

但是,我想知道,如何组合多个视图外观,假设我有一个BlueView协议可以定义一个蓝色背景的视图,一个RoundedCorner协议定义一个圆角视图。

我该怎么做这样的事情:

MyView: View, BlueView, RoundedCorner { ...

为了不必在我的应用程序的每个视图中设置这些代码行?

谢谢您的帮助

0 投票
1 回答
39 浏览

swift - 如何在协议中创建变量属性,其中一个类的 {get set} 和另一个类的 {get}

在 Stage1 类中,我需要作为 {get set} 访问“mustBeSettable”,而在 Stage2 类中,“mustBeSettable”应该只是 {get}。但我需要在两个类中使用相同的属性。