分配给变量或立即返回它不起作用

时间:2014-09-12 18:17:08

标签: ios swift

如果我这样做:

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
            }

1 个答案:

答案 0 :(得分:2)

问题与Swift报道的不同。 Swift中的错误报告有时会非常奇怪。

真正的问题是filter期望返回一个布尔值,表示是否应该包含该项。但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)
}