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