如果我这样做:
func myFunc() -> NSRange{
var range = s.rangeOfString(searchText, options: .CaseInsensitiveSearch)
return s.rangeOfString(searchText, options: .CaseInsensitiveSearch)
}
我得到一个错误,说第二次调用中有额外的参数.但它们完全一样!
另一方面,这很好用:
func myFunc() -> NSRange{
var range = s.rangeOfString(searchText, options: .CaseInsensitiveSearch)
return range
}
我的问题是隐含的.所以这就是:为什么swift编译器不满足于第一个选项,而是让我首先将函数的返回值分配给变量?
如果这对你有用,这是我的完整代码:
var a: [MyObject] = []
array = a.filter{
var b = ($0 as MyObject).molecule.name
var s: NSString = b as NSString
var range = s.rangeOfString(searchText, options: .CaseInsensitiveSearch)
return s.rangeOfString(searchText, options: .CaseInsensitiveSearch)
return range.location != -1
}
最佳答案 问题与Swift报道的不同. Swift中的错误报告有时会非常奇怪.
真正的问题是过滤器需要返回一个布尔值,表示是否应该包含该项.但rangeOfString返回NSRange.
因此,如果返回一个产生布尔值的表达式,它可以正常工作.
return s.rangeOfString(
searchText,
options: .CaseInsensitiveSearch
).location != NSNotFound
这就是你的第一个例子正常工作的原因.你说这个函数返回一个NSRange,然后你返回一个NSRange就可以了!
func myFunc() -> NSRange{
var range = s.rangeOfString(searchText, options: .CaseInsensitiveSearch)
return s.rangeOfString(searchText, options: .CaseInsensitiveSearch)
}