【发布时间】:2020-02-22 02:27:16
【问题描述】:
我进行了一些搜索,但似乎无法为我的以下问题找到解决方案。我对 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(目标:“foo”,比较:==))
还要注意,“StringOrInt”是我定义的一个协议,它充当 Int 和 String 的扩展。这样做是因为测试代码(我没有编写也无法编辑)将字符串和整数都传递给了同一个变量和函数。
感谢您的帮助,我真的很感激!
【问题讨论】:
-
StringOrInt的定义是什么? -
很明显你来自 Haskell 背景,或者类似的背景,但你知道,这些几乎都不是“传统的 Swift”,因为大多数人会写或认可社区。 Swift 更喜欢
lowerCamelCase作为函数,而不是snake_case。它更喜欢在类型上编写实例函数,而不是采用target参数。它更喜欢数组而不是链表(比如cons,相比之下,它的表现非常糟糕)。 -
你为什么传递
==而不是单个字符"="? -
我已经更新了代码以提及这一点,StringOrInt 是一个允许将 int 类型和 string 类型都传递给该变量的协议,因为测试代码将这两种类型都传递给同一个变量不同的点。
标签: swift