2014-07-06 60 views
1

我打算通過蘋果的斯威夫特編程指南,和146頁上遇到了以下功能:如何確保我在函數中返回正確的布爾值?

func containsCharacter(#string: String, #characterToFind: Character) -> BOOL { 
    for character in string { 
     if character == characterToFind { 
      return true 
     } 
    } 
    return false 
} 

爲什麼是它的return false片段存在於功能這一點?爲什麼不這個函數是這個樣子:

func containsCharacter(#string: String, #characterToFind: Character) -> BOOL { 
    for character in string { 
     if character == characterToFind { 
      return true 
     } else { 
      return false 
     } 
    } 
} 

它是如何函數工作它顯示在蘋果的書呢?

謝謝!

+0

當字符串不爲空時,第二個版本類似於'return string [0] == characterToFind' –

+0

用幾個小例子手動嘗試它,它應該變得非常明顯,區別是什麼。我建議搜索字符串「doh!」字母「o」或「x」。 – pjs

回答

1

我想說的第一件事,也許你還沒有意識到,一個return語句終止函數的執行。 return語句的值傳遞給調用者,執行返回給調用者。

所以,有了這個理解,我們來看看這個函數。它在字符串中搜索特定的字符。它通過檢查字符串中的所有字符來查找匹配項。如果發現匹配,則返回true。否則它會繼續到下一個字符。如果循環完成,則會發現沒有找到匹配的字符,所以函數可以返回false。在確定沒有匹配之前,它需要到達循環的結尾。

寫下你的路,循環是毫無意義的。該函數保證從第一次迭代中返回。所以循環永遠不會超過第一次迭代,並且函數只會與第一個字符進行比較。而且,爲了更好的衡量,如果字符串是空的,返回值將是未定義的。

+0

我看到它繼續遍歷字符串中的每個字符。當'if'比較評估爲'true'時,立即執行循環結束嗎? 如果首先觸發'return true',返回false是否永遠不會返回?如果我在'return true'之後添加額外的代碼,是否會跳過該代碼? –

+1

@JoshWinskill是的,'return'立即退出函數。 – pjs

+0

@pjs謝謝!這是我對這個缺失的鏈接。謝謝你,@ David-Heffernan! –