swift - 作为参数的通用协议因“无法使用类型的参数列表调用”错误而失败
问题描述
我在操场上有这段代码,但它没有编译。错误是Cannot invoke 'actionDispatcher' with an argument list of type '(uiEvent: MyEvent)'
。
这是代码片段:
import UIKit
protocol CircuitUiEvent {}
protocol CircuitInteractor {
associatedtype UiEvent: CircuitUiEvent
func actionDispatcher(uiEvent: UiEvent)
}
enum MyEvent: CircuitUiEvent {
case hello
}
class MyInteractor: CircuitInteractor {
typealias UiEvent = MyEvent
func actionDispatcher(uiEvent: MyEvent) {
print("Hello")
}
}
extension CircuitInteractor {
func myTestFunction() {
let uiEvent = MyEvent.hello
actionDispatcher(uiEvent: uiEvent) <--- this line throws the error
}
}
let interactor = MyInteractor()
interactor.myTestFunction()
有任何想法吗?我需要的是一个符合要作为参数传递的协议的枚举,所以我可以有一个简单的 API 定义,根据它的使用位置或它背后的模型,它可以使用不同的 switch 语句。
解决方案
除非我误解了某些东西,否则您似乎需要转到myTestFunction
课堂MyInteractor
,因为它是一个使用具体事件类型同时CircuitInteractor
使用通用协议的函数。也许,这样的事情会有意义?
protocol CircuitUiEvent {}
protocol CircuitInteractor {
associatedtype UiEvent: CircuitUiEvent
func actionDispatcher(uiEvent: UiEvent)
}
extension CircuitInteractor {
func actionDispatcher(uiEvent: UiEvent) {
print(uiEvent)
}
}
enum MyEvent: CircuitUiEvent {
case hello
}
class MyInteractor: CircuitInteractor {
typealias UiEvent = MyEvent
func myTestFunction() {
self.actionDispatcher(uiEvent: .hello)
}
}
let interactor = MyInteractor()
interactor.myTestFunction()
推荐阅读
- regex - 从 .ini 文件中读取正则表达式
- python - 如何制作标记数据点的分布图?
- java - Apache POI 确定最后一行的可靠方法
- r - 获取树库中数据的终端节点
- json - 如何将 api 调用结果导出到具有单响应值的 csv 中?
- python - 我可以使用 android studio 代替 Pycharm 来学习 Django .. 如果没有.. 为什么?如果是的话..如何?
- python - Project Euler 17 回答错误了几位数
- javascript - 矩阵的所有变体
- javascript - 涉及选项卡和根页面的离子路由不起作用
- codenameone - 主题:找出样式层次结构