用于Swift测试的均衡元组

用于Swift测试的均衡元组,swift,Swift,我正在用Swift测试一系列函数 我需要比较一个复杂的元组类型(这应该在一个xctasertequal语句中,而不是比较元组的所有组成类型) 为了简单起见,我尝试将我的已知答案与本示例中的答案进行比较: let answer: (question: [String], correctAnswerIndex: [String], givenAnswers: [String], givenAnswerIndex: [String]) = (question:[], correctAnswerInde

我正在用Swift测试一系列函数

我需要比较一个复杂的元组类型(这应该在一个
xctasertequal
语句中,而不是比较元组的所有组成类型)

为了简单起见,我尝试将我的已知答案与本示例中的答案进行比较:

let answer: (question: [String], correctAnswerIndex: [String], givenAnswers: [String], givenAnswerIndex: [String]) = (question:[], correctAnswerIndex: ["0"], givenAnswers: ["0"], givenAnswerIndex: ["0"])
XCTAssertEqual(answer,answer)
可以预见,这会导致类型不相等的错误

全局函数“xctasertequal(::\文件:行:)”要求 (问题:[String],正确答案索引:[String],给定答案: [String],givenAnswerIndex:[String])符合“Equalable”


因此,我希望在测试中有一个单独的扩展,以使这些相等,我能看到的最接近的答案涉及通用参数,我真的希望使这尽可能简单…

而不是
相等
,有一个解决办法,就是为
答案
元组编写一个
=
函数:

typealias Answer = (question: [String], correctAnswerIndex: [String], givenAnswers: [String], givenAnswerIndex: [String])
func ==(answer: Answer, anotherAnswer: Answer) -> Bool {
    // Implement your own equation logic here!
    return answer.question == anotherAnswer.question
        && answer.correctAnswerIndex == anotherAnswer.correctAnswerIndex
    && answer.givenAnswers == anotherAnswer.givenAnswers
    && answer.givenAnswerIndex == anotherAnswer.givenAnswerIndex
}

let answer: Answer = (question:[], correctAnswerIndex: ["0"], givenAnswers: ["0"], givenAnswerIndex: ["0"])
XCTAssertTrue(answer == answer)

除了
Equatable
,还有一个变通办法,就是为
答案
元组编写
=
函数:

typealias Answer = (question: [String], correctAnswerIndex: [String], givenAnswers: [String], givenAnswerIndex: [String])
func ==(answer: Answer, anotherAnswer: Answer) -> Bool {
    // Implement your own equation logic here!
    return answer.question == anotherAnswer.question
        && answer.correctAnswerIndex == anotherAnswer.correctAnswerIndex
    && answer.givenAnswers == anotherAnswer.givenAnswers
    && answer.givenAnswerIndex == anotherAnswer.givenAnswerIndex
}

let answer: Answer = (question:[], correctAnswerIndex: ["0"], givenAnswers: ["0"], givenAnswerIndex: ["0"])
XCTAssertTrue(answer == answer)

你为什么不干脆用
xctasert(actualAnswer==expectedAnswer)来做呢
?因为它们不可等分,所以Swift编译器会传递相同的错误消息。您真的尝试过吗?元组不能等分,但您可以对兼容的元组应用
=
。@WishIHadThreeGuns您确定结构不比元组更合适吗?@OOPer的建议是正确的。只需使用
xctasert即可(actualAnswer==expectedAnswer)
。你为什么不干脆像
xctasert(actualAnswer==expectedAnswer)那样做呢
?因为它们不可等分,所以Swift编译器会传递相同的错误消息。您真的尝试过吗?元组不能等分,但您可以对兼容的元组应用
=
。@WishIHadThreeGuns您确定结构不比元组更合适吗?@OOPer的建议是正确的。只需使用
xctasert即可(actualAnswer==expectedAnswer)
。不需要实现此
=
函数。您可以将元组与
=
进行比较,而无需实现
==
。不需要实现此
=
函数。您可以将元组与
=
进行比较,而无需实现
=