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

标签 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
            }

最佳答案

问题与 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/

相关文章:

Swift:带有 inout 闭包的函数

iphone - 使用 iPod 录制和播放音频

ios - 如何在 Swift 中将文本添加到 .csv 数据中?

ios - WatchOS 检测用户是否已离开 watch /锁定屏幕

ios - 如何打破字符上的 UILabel 文本,而不是单词

ios - 展开 segue 不展开

ios - 如何从嵌入在导航 Controller 中的简单 View Controller 调用选项卡栏 View Controller ?

ios - 库未加载 - Alamofire

ios - 是否可以在单独的文件中包含UISearchBarDelegate扩展名?

ios - Jenkins iOS faSTLane 构建 : Could not find 'bundler'