如何在Swift中分配一个可以为空的数组元素?
How to assign an array element which can be null in Swift?
在我的 Swift 应用程序中,我正在查询一个 api 返回一个 json 对象,如下所示:
{
key1: value1,
key2: value2,
array : [
{
id: 1,
string: "foobar"
},
{
id: 2,
string: "foobar"
}
]
}
事实:
- 数组值可以为空。
- 我想读取第一个数组元素,
存在与否。
在 Swift 我在做 :
if let myArray: NSArray = data["array"] as? NSArray {
if let element: NSDictionary = myArray[0] as? NSDictionary {
if let string: NSString = element["string"] as? NSString {
// i should finally be able to do smth here,
// after all this crazy ifs wrapping
}
}
}
如果数组和第一个元素存在,它会工作,但我遇到 "index 0 beyond bounds for empty array" 崩溃,即使元素分配在 if let 包装内。
我做错了什么?我对 Swift 选项、打字和疯狂 if let wrapping 无处不在感到疯狂...
你可以用这个
var a = [Any?]()
a.append(nil)
如果你有一个带有 AnyObject
的非可选数组,你可以使用 NSNull
(就像在 Obj-C 中一样)
错误与 Optional
无关。如果你对数组使用订阅([]
),你必须检查它的长度。
if let myArray: NSArray = data["array"] as? NSArray {
if myArray.count > 0 { // <- HERE
if let element: NSDictionary = myArray[0] as? NSDictionary {
if let string: NSString = element["string"] as? NSString {
println(string)
}
}
}
}
但是我们手头有.firstObject
属性
The first object in the array. (read-only)
If the array is empty, returns nil.
使用这个:
if let myArray: NSArray = data["array"] as? NSArray {
if let element: NSDictionary = myArray.firstObject as? NSDictionary {
if let string: NSString = element["string"] as? NSString {
println(string)
}
}
}
而且,我们可以使用 "Optional Chaining" 语法:
if let str = (data["array"]?.firstObject)?["string"] as? NSString {
println(str)
}
在我的 Swift 应用程序中,我正在查询一个 api 返回一个 json 对象,如下所示:
{
key1: value1,
key2: value2,
array : [
{
id: 1,
string: "foobar"
},
{
id: 2,
string: "foobar"
}
]
}
事实:
- 数组值可以为空。
- 我想读取第一个数组元素, 存在与否。
在 Swift 我在做 :
if let myArray: NSArray = data["array"] as? NSArray {
if let element: NSDictionary = myArray[0] as? NSDictionary {
if let string: NSString = element["string"] as? NSString {
// i should finally be able to do smth here,
// after all this crazy ifs wrapping
}
}
}
如果数组和第一个元素存在,它会工作,但我遇到 "index 0 beyond bounds for empty array" 崩溃,即使元素分配在 if let 包装内。
我做错了什么?我对 Swift 选项、打字和疯狂 if let wrapping 无处不在感到疯狂...
你可以用这个
var a = [Any?]()
a.append(nil)
如果你有一个带有 AnyObject
的非可选数组,你可以使用 NSNull
(就像在 Obj-C 中一样)
错误与 Optional
无关。如果你对数组使用订阅([]
),你必须检查它的长度。
if let myArray: NSArray = data["array"] as? NSArray {
if myArray.count > 0 { // <- HERE
if let element: NSDictionary = myArray[0] as? NSDictionary {
if let string: NSString = element["string"] as? NSString {
println(string)
}
}
}
}
但是我们手头有.firstObject
属性
The first object in the array. (read-only)
If the array is empty, returns nil.
使用这个:
if let myArray: NSArray = data["array"] as? NSArray {
if let element: NSDictionary = myArray.firstObject as? NSDictionary {
if let string: NSString = element["string"] as? NSString {
println(string)
}
}
}
而且,我们可以使用 "Optional Chaining" 语法:
if let str = (data["array"]?.firstObject)?["string"] as? NSString {
println(str)
}