Swift 通用序列可观察歧义

标签 swift generics rx-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 给我以下错误:

Expression type '()' is ambiguous without more context

我不知道为什么会这样 :( 到目前为止,我能够通过将 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

conformance-requirement → type-identifier : protocol-composition-type

关于Swift 通用序列可观察歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52674427/

相关文章:

c# - JIT 编译器如何编译泛型?

swift3 - RxSwift : Repeat a (completed) stream

ios - 如何向按钮添加圆角半径和图标?

java - 绑定(bind)不匹配缓解

ios - 错误域 = PlugInKit 代码 = 13 "query cancelled"UserInfo = {NSLocalizedDescription = 查询已取消}

Java 通用构建器

ios - 在这里订阅普通类型和可观察类型有什么区别?

rx-swift - 为什么我们需要在 RxSwift 中在 "disposeBy(bag)"之后显式调用 "subscribe"

ios - 以编程方式设置自动布局约束

ios - Swift ResearchKit makePDFWithCompletionHandler