首页 > 解决方案 > 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)
}

在我调用testFunkXcode 的那一行给了我以下错误:

表达式类型 '()' 在没有更多上下文的情况下是模棱两可的

我不知道为什么会这样:(到目前为止,我能够通过将约束更改testFunk为:

func funk<T: NamedOption>(d: Observable<[T]>) {

}

在我看来,这似乎比顶部的版本更具限制性。有谁知道如何使它与T: Sequence

Xcode 版本是 9.4,Swift 版本是 4.1。

标签: swiftgenericsrx-swift

解决方案


==在工作同事的一些挖掘和帮助之后,我能够通过简单地改变它来使其工作,:所以它看起来像这样

func testFunk<T: Sequence>(d: Observable<T>) where T.Element: NamedOption {

}

这只是快速语法的问题 https://docs.swift.org/swift-book/ReferenceManual/GenericParametersAndArguments.html

一致性要求 → 类型标识符:协议组合类型


推荐阅读