2014-11-08 79 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