我已经进行了一些搜索,但似乎找不到以下问题的解决方案。我是新手,因此需要解决一些问题。我有以下函数,它只是一个存有函数签名和返回值的存根,用于使其编译。
测试代码就是我给的,我没有写,遗憾的是无法更改。
我的问题是,当我运行它时,它说调用此函数的测试具有“对成员'=='的歧义调用”。我无法更改测试代码。无论是什么问题,我都必须假定在我的函数签名中,但可以使用一些帮助。
我正在编写的功能(假定包含此问题):
func contains(target: StringOrInt, compare: Character ) -> Bool {
return false
} // contains
调用该函数的测试(不允许编辑且未编写):
func test_contains_cons_2_strings_3() {
let list1 = MyList.cons("foo", MyList.cons("bar", MyList.empty))
assertEquals(testName: "test_contains_cons_2_strings_3",
expected: true,
received: list1.contains(target: "bar", compare: ==))//Error is on this line '=='
} // test_contains_cons_2_strings_3
错误: main.swift:807:67:错误:对成员'=='的含糊引用 收到:list1.contains(target:“ foo”,比较:==))
还请注意,“ StringOrInt”是我定义的协议,可作为Int和String的扩展。这样做是因为测试代码(我没有编写并且无法编辑)将字符串和整数都传递给了相同的变量和函数。
谢谢您的帮助,我真的很感激!
答案 0 :(得分:0)
我认为您想通过传递“ ==”运算符并返回一个布尔值来比较两个字符串。如果可以,则可以使用以下方法,
func myList(_ compare:((String, String) -> Bool)) -> Bool {
return compare("foo","bar")
}
myList(==)
答案 1 :(得分:0)
我可以使用以下方法弄清楚这一点。我实现了一个通用类型的枚举和该枚举的nan扩展。然后,我在contains函数中使用了这种通用类型来表示多个类型,而不是StringOrInt。感谢大家的评论和帮助。
枚举已实现:
indirect enum my_list<A> {
case cons(A, my_list<A>)
case empty
}
然后我在扩展中实现了该枚举“ extension my_list”,并将contains函数放置在扩展中。
包含功能签名/存根:
func contains(target: A, compare:((A, A) -> Bool))
-> Bool {
return true
}// contains