给定一个包含[Any]可选值和非可选值的数组,例如:
let int:Int? = 1
let str:String? = "foo"
let values:[Any] = [int,2,str,"bar"]
Run Code Online (Sandbox Code Playgroud)
我们怎样才能提取的值Optional的Any类型(如果有的话),所以我们可以创建一个通用的打印功能,仅打印出的值.
例如,这个printArray函数遍历并打印每个元素:
func printArray(values:[Any]) {
for i in 0..<values.count {
println("value[\(i)] = \(values[i])")
}
}
printArray(values)
Run Code Online (Sandbox Code Playgroud)
哪个会输出:
value[0] = Optional(1)
value[1] = 2
value[2] = Optional("foo")
value[3] = bar
Run Code Online (Sandbox Code Playgroud)
我们如何更改它以便它只打印基础值,以便在可选时将其展开值?例如:
value[0] = 1
value[1] = 2
value[2] = foo
value[3] = bar
Run Code Online (Sandbox Code Playgroud)
更改参数时它可以工作[Any?],例如:
let values:[Any?] = [int,2,str,"bar"]
func printArray(values:[Any?]) {
for i in 0..<values.count {
println("value[\(i)] = \(values[i]!)") …Run Code Online (Sandbox Code Playgroud) 当我使用Any类型时,我对Swift如何检查nil感到困惑.
这是一个例子:
let testA: Any? = nil
let testB: Any = testA as Any
let testC: Any? = testB
if testA != nil {
print(testA) // is not called as expected
}
if testB != nil {
print(testB) // prints "nil"
}
if testC != nil {
print(testC) // prints "Optional(nil)"
}
Run Code Online (Sandbox Code Playgroud)
testA按预期工作.变量为nil,因此条件为false.
testB的工作并不像预期的那样.变量为nil,如打印调用所示.但条件testB != nil评估为真.为什么会这样?
testC也困惑我,因为它是testC = testB = testA.那么为什么它的行为与testA不同呢?
我怎么需要写if条件if testB ...而if testC ...不是真的.
我正在寻找一种不需要我知道类型的解决方案,比如......
if let …Run Code Online (Sandbox Code Playgroud) swift ×2