如果我这样做:
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 中的错误报告有时会很奇怪。
真正的问题是 filter
期望返回一个 bool 值,表示是否应该包含该项目。但是 rangeOfString
返回一个 NSRange
。
因此,如果您返回一个产生 bool 值的表达式,它就可以正常工作。
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)
}
关于ios - 分配给变量或立即返回它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25814399/