swift - Swift 泛型序列可观察到的歧义
问题描述
我有以下代码
protocol NamedOption {
var optionTitle: String { get }
}
struct DebugOption: NamedOption {
let optionTitle: String
let debugViewControllerType = UIViewController.self
}
func testFunk<T: Sequence>(d: Observable<T>) where T.Element == NamedOption {
}
func bindFullResultsRx() {
let dd: Observable<[DebugOption]> = self.dataModel.debugOptions // this is defined and properly assigned earlier
testFunk(d: dd)
}
在我调用testFunk
Xcode 的那一行给了我以下错误:
表达式类型 '()' 在没有更多上下文的情况下是模棱两可的
我不知道为什么会这样:(到目前为止,我能够通过将约束更改testFunk
为:
func funk<T: NamedOption>(d: Observable<[T]>) {
}
在我看来,这似乎比顶部的版本更具限制性。有谁知道如何使它与T: Sequence
?
Xcode 版本是 9.4,Swift 版本是 4.1。
解决方案
==
在工作同事的一些挖掘和帮助之后,我能够通过简单地改变它来使其工作,:
所以它看起来像这样
func testFunk<T: Sequence>(d: Observable<T>) where T.Element: NamedOption {
}
这只是快速语法的问题 https://docs.swift.org/swift-book/ReferenceManual/GenericParametersAndArguments.html
一致性要求 → 类型标识符:协议组合类型
推荐阅读
- drupal-7 - Drupal:重建权限失败,站点无法访问
- java - 为什么超类对象无法处理子类列表
- linux-kernel - 从其他设备驱动程序访问设备驱动程序私有数据时的空指针
- spring-boot - 如何使用 Jenkins 在测试服务器上运行 Spring Boot 应用程序
- javascript - 如何从 Material UI 获取 TextField 的输入值?
- javascript - 点击移动设备后删除按钮悬停效果?
- mysql - 尝试更新数据库时出现语法错误
- dji-sdk - 为什么 DJI Mobile SDK 航点任务下降时垂直速度限制为 -0.5m/s?
- django - django dateTimeField deltat
- reactjs - Babel 不会转译箭头函数的 JSX 实例