在 Swift 中找不到接受类型为“(Array<String!>, String)”的参数列表的 'contains' 的重载
Cannot find an overload for 'contains' that accepts an argument list of type '(Array<String!>, String)' in Swift
我正在尝试使用 contains
确定 Array
是否包含某个字符串值。数组定义如下:
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) {
...
但是我收到一条错误消息:
'Array<String!>' does not have a member named contains
如何使用 contains
而不会 Swift 返回错误?
问题是隐式可选类型Array<String!>
。删除感叹号,代码编译正常。
你真的需要可选类型吗?在许多情况下,您可以使用空字符串作为 "no string" 值。
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, { [=12=] == searchString } ) { ... }
// Swift 2:
if myArray.contains( { [=12=] == searchString } ) { ... }
在 swift 中定义一个字符串数组在这种情况下不应该是通用的,这对你有用
var myArray: [String] = []
var searchString: String! = "Search"
if contains(myArray, searchString) {
println("Exists")
}
else {
println("Doesn't Exist")
}
我认为您的问题与 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")
}
我正在尝试使用 contains
确定 Array
是否包含某个字符串值。数组定义如下:
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) {
...
但是我收到一条错误消息:
'Array<String!>' does not have a member named contains
如何使用 contains
而不会 Swift 返回错误?
问题是隐式可选类型Array<String!>
。删除感叹号,代码编译正常。
你真的需要可选类型吗?在许多情况下,您可以使用空字符串作为 "no string" 值。
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, { [=12=] == searchString } ) { ... }
// Swift 2:
if myArray.contains( { [=12=] == searchString } ) { ... }
在 swift 中定义一个字符串数组在这种情况下不应该是通用的,这对你有用
var myArray: [String] = []
var searchString: String! = "Search"
if contains(myArray, searchString) {
println("Exists")
}
else {
println("Doesn't Exist")
}
我认为您的问题与 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")
}