我正在尝试使用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
?
答案 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")
}