Swift-成员'=='错误的引用

时间:2019-10-25 18:00:55

标签: swift

我已经进行了一些搜索,但似乎找不到以下问题的解决方案。我是新手,因此需要解决一些问题。我有以下函数,它只是一个存有函数签名和返回值的存根,用于使其编译。

测试代码就是我给的,我没有写,遗憾的是无法更改。

我的问题是,当我运行它时,它说调用此函数的测试具有“对成员'=='的歧义调用”。我无法更改测试代码。无论是什么问题,我都必须假定在我的函数签名中,但可以使用一些帮助。

我正在编写的功能(假定包含此问题):

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的扩展。这样做是因为测试代码(我没有编写并且无法编辑)将字符串和整数都传递给了相同的变量和函数。

谢谢您的帮助,我真的很感激!

2 个答案:

答案 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