2014-11-08 115 views
1

繼在記錄迅速手冊 http://swift-ios.co/standard-functions-in-swift/使用迅速

我找到的代碼的提取物的陣列的特定值的使用

var languages = ["Swift", "Objective-C"] 
find(languages, "Objective-C") == 1 
find(languages, "Java") == nil 
find([29, 85, 42, 96, 75], 42) == 2 
索引報告的指令查找某一值的陣列的索引

的問題是,所述輸出值沒有按」 T具有相同類型的元素的OS起動陣列中,由於在控制檯的輸出是(最後一行)

Optional(2) 

如果我想將2作爲IntDouble怎麼辦?

+2

我不明白標題。你能改變它以消除誤導性的「最大/最小值」?你的問題根本不是那個問題。 – Mundi 2014-11-08 11:41:57

+0

@Mundi對不起,我編輯了標題。謝謝。 – Nicholas 2014-11-08 14:41:10

回答

1

它是Int?(又名Optional<Int>)。你需要從中提取Int。您可以使用if-let語法

if let index = find([29, 85, 42, 96, 75], 42) { 
    // index is Int 
} 
+2

注意:'可選'和'Int?'是表達同樣事物的不同方式:可選。閱讀你的答案,看起來他們是不同的。我會明確表示,只是爲了避免混淆 – Antonio 2014-11-08 11:13:57

+0

@mstysf天才!有效!我不明白查找給出的輸出類型,爲什麼它不應該只是數組中的值的類型。無論如何,非常感謝你 – Nicholas 2014-11-08 14:44:20

+1

可選項是處理沒有任何案件或錯誤的情況下。一個可選值包含一個值或'nil'。爲了提取它的值,你需要使用'if-let'語法或'!'操作符來強制可選的解包。但是當你使用'!'操作符時你必須小心。如果可選值包含'nil',則會導致程序崩潰。在你的情況下,考慮一個數組'[1,2,3,4,5]',當你調用'find(array,20)'時會發生什麼。因爲數組中沒有'20',所以返回'nil'是合乎邏輯的。因爲'find'函數可以返回'nil'或一個值,所以返回類型是'Int?'而不是'Int'。 – mustafa 2014-11-08 14:53:27