在Array.first中隐式展开可选对象

时间:2019-03-05 20:02:52

标签: swift

回想一下Array's first method返回一个可选内容。下面给出警告,它隐式强制了可选项,因此,这可能是一种不好的做法:

let names = ["Bob", "Alice"]
let x = names.first 
print(x)
// Warning: Expression implicitly coerced from 'String?' to 'Any'

但是,example in the Apple Swift docs for closures的简化看起来似乎是等效的,并且不会发出警告。

var closures: [() -> Void] = []

closures.append {print("Hello from the first closure in the list!")}
closures.append {print("Hello from the second closure in the list!")}

// Implicitly coerce the closure
closures.first?()

// Printed: Hello from the first closure in the list!

除了一个是可选的String另一个是可选的闭包以外,这些不是“相同的”吗?因为它在Swift的官方文档中,并且没有引发任何错误,所以我相信这是可以的用法。我想念什么?

编辑:感谢您的回复!我想我现在明白了。类似于第一个示例的示例将更像是:

var closures: [() -> String] = []

closures.append {"Hello from the first closure in the list!"}
print(closures.first?())

这确实给出了相同的警告,因为optional chaining返回一个可选内容,即使闭包没有。

0 个答案:

没有答案