找不到包含&#39;包含&#39;接受类型&#39;(Array <string!>,String)&#39;的参数列表。在斯威夫特

时间:2015-07-09 07:33:07

标签: arrays swift search contains

我正在尝试使用node确定Array是否包含某个字符串值。数组的定义如下:

contains

这是在一个单独的文件中(因为它在许多不同的地方被操纵),我正在尝试执行以下操作:

var myArray: Array<String!> = []

每次我尝试运行上面的代码时,都会收到错误消息:

var searchString: String! = "Search"

if contains(myArray, searchString) {
     println("Exists")
}
else {
     println("Doesn't Exist")
}

我尝试了以下内容:

Cannot find an overload for 'contains' that accepts an argument list of type '(Array<String!>, String)'

然后我收到一个错误说:

if myArray.contains(searchString) {
...

如果没有Swift返回错误,如何使用'Array<String!>' does not have a member named contains

4 个答案:

答案 0 :(得分:0)

问题是隐式可选类型Array<String!>。删除感叹号,代码编译正常。 你真的需要一个可选类型吗?在许多情况下,您可以使用空字符串作为&#34;没有字符串&#34;值。

答案 1 :(得分:0)

contains()函数有两种变体:

// 1
func contains<S : SequenceType, L : BooleanType>(seq: S, predicate: @noescape (S.Generator.Element) -> L) -> Bool
// 2
func contains<S : SequenceType where S.Generator.Element : Equatable>(seq: S, x: S.Generator.Element) -> Bool

您的代码调用第二个代码,这需要序列 元素符合Equatable协议。情况就是如此 String,但不适用于(隐式解包的可选)String!

String替换String!可以解决问题:

var myArray: Array<String> = []

如果那是不可能的,那么你可以使用第一种变体 contains()使用谓词作为第二个参数:

// Swift 1.2:
if contains(myArray, { $0 == searchString } ) { ... }

// Swift 2:
if myArray.contains( { $0 == searchString } ) { ... }

答案 2 :(得分:0)

在这种情况下,在swift中定义字符串数组不应该是通用的,这对您有用

var myArray: [String] = []

var searchString: String! = "Search"

if contains(myArray, searchString) {
     println("Exists")
}
else {
     println("Doesn't Exist")
}

答案 3 :(得分:0)

我认为您的问题与myArray的类型有关。为什么需要使用String!

这适用于Swift 1.2

var myArray: Array<String> = []

var searchString: String = "Search"

if contains(myArray, searchString) {
    println("Exists")
}
else {
    println("Doesn't Exist")
}

这在Swift 2.0中(从Xcode 7 Beta 3开始)

var myArray: Array<String> = []

var searchString: String = "Search"

if myArray.contains(searchString) {
    print("Exists")
}
else {
    print("Doesn't Exist")
}