表达式类型'()'不明确,没有XCTAssertEqual的更多上下文

萝卜甜菜

Expression type '()' is ambiguous without more context调用test方法时看到错误XCTAssertEqual我尝试显式添加[(Character,Int)]expected但仍然看到此错误。我不确定还有什么尝试。

如何使Swift编译器了解?

测试:

func testFrequencyCountOnInput() {
    let huff = Huffman("ANNA")
    let expected: [(Character,Int)] = [("A", 2), ("N", 2)]
    XCTAssertEqual(huff.frequency, expected)
}

码:

class Huffman {
    private(set) var frequency: [(Character, Int)]

    init(_ input: String) {
        self.frequency = Huffman.sortedFrequency(for: input)
    }

    static private func sortedFrequency(for input: String) -> [(Character, Int)] {
        var frequency = [Character: Int]()
        for char in input {
            frequency[char] = (frequency[char] ?? 0) + 1
        }
        let sorted = Array(frequency).sorted(by: {$0.1 > $1.1})
        return sorted
    }
}
和解

我认为Tuple在这里使用不是一个好主意。相反,您可以将其重构为某种类型。例如:

struct Frequency: Equatable {
    let char: Character
    let count: Int
}

Struct很好,它是一个值类型(作为Tuple),可以自动合成对Equatableprotocol的一致性

下一步是Huffman上课。对于这么小的问题,您有大量的代码。让我们也尝试重构它:

final class Huffman {
    private(set) var frequency: [Frequency]

    init(_ input: String) {
        frequency = input.counts
            .map { Frequency(char: $0.key, count: $0.value) }
            .sorted(by: { $0.count > $1.count })
    }
}

extension String {
    var counts: [Character: Int] {
        return reduce(into: [:]) { d, c in
            d[c] = d[c, default: 0] + 1
        }
    }
}

注意,这段代码计算String扩展名counts属性中的频率(也许不是最好的名字),然后map求和[Frequency],最后对它进行排序不是一个大问题。更少的代码,更准确。
在这里,我们进行单个测试:

func testFrequencyCountOnInput() {
    let huff = Huffman("ANNNA")
    let expected: [Frequency] = [
        Frequency(char: "N", count: 3),
        Frequency(char: "A", count: 2)
    ]
    XCTAssertEqual(huff.frequency, expected)
}

一切正常,甚至sort功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Xcode:表达式类型不明确,没有更多上下文

init CBCentralManager:表达式类型不明确,没有更多上下文

EventMonitor .LeftMouseDownMask表达式类型不明确,没有更多上下文

Swiftui错误:表达式类型不明确,没有更多上下文

表达式类型不明确,没有更多上下文

表达式类型'Set <NSObject>'不明确,没有更多上下文

表达式类型不明确,没有更多上下文(枚举)

表达式类型'(_,_.Stride)-> _'不明确,没有更多上下文

修复“没有更多上下文的表达式类型不明确”

在 dataTask 中没有更多上下文的表达式类型不明确

没有更多上下文的表达式类型不明确 - .filter

在Swift中-表达式类型不明确,没有更多上下文

表达式类型不明确,没有更多上下文上下文

带有SwiftUI的NavigationLink:表达式类型不明确,没有更多上下文

表达式类型不明确,在返回“some View”的函数上没有更多上下文

Swift 2调用enumerateTagsInRange时“表达式类型不明确,没有更多上下文”

completeHandler-在没有更多上下文的情况下表达式的类型不明确

测试在抛出的函数上返回“表达式类型不明确,没有更多上下文”

使用 coredata 时,没有更多上下文 Swift 的表达式类型不明确

Swift闭包中的“表达式类型不明确,没有更多上下文”

通过NSAttributedString进行删除:“表达式类型不明确,没有更多上下文”

在 Swift3 中没有更多上下文的表达式类型不明确

CCCrypt - 在 iOS 14 更新后没有更多上下文的表达式类型不明确

MTKView:表达式类型不明确,在commandBuffer.present上没有更多上下文

SwiftUI抱怨表达式类型不明确,而NavigationBarItems中没有更多上下文

泛型函数:表达式类型不明确,没有更多上下文

迅速的for循环“表达式类型'[[[String:String]]]'不明确,没有更多上下文

表达式类型不明确,没有更多上下文快捷方式4.0

SwiftUI:在视图之间传递ObservableObject时,表达式类型不明确,没有更多上下文