2014-09-12 32 views
4

如果我這樣做:分配到變量或返回它馬上不起作用

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 
      } 
+0

一個downvoted請考慮添加一個評論,所以我知道發生了什麼事情。 – 2014-09-12 18:20:08

+2

請將您的代碼示例作爲文本發佈。您的代碼行高度爲5像素...如果有人想將代碼複製到遊樂場以測試解決方案,那麼他們無法從圖像中執行此操作。 – 2014-09-12 18:26:08

+0

那裏,只是做到了。 – 2014-09-12 18:31:42

回答

2

的問題是比雨燕的報告不同。有時候,Sw​​ift中的錯誤報告可能會很奇怪。

真正的問題是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) 
} 
+0

你是對的。就像C++一樣,錯誤報告可能會引起誤解。這對開發人員沒有幫助。 – 2014-09-12 18:49:11

+0

當我收到一個我不明白的Swift錯誤信息時,我已經習慣了四處尋找任何奇怪的東西。在這種情況下,返回'NSRange'到'filter'是很奇怪的。 – 2014-09-12 18:51:45

相關問題