gpt4 book ai didi

ios - 如何在 Swift 中分配一个可以为 null 的数组元素?

转载 作者:行者123 更新时间:2023-11-28 13:17:50 25 4
gpt4 key购买 nike

在我的 Swift 应用程序中,我正在查询一个返回 json 对象的 api,如下所示:

{
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
}
}
}

如果数组和第一个元素存在,它会工作,但即使元素赋值在 if let 包装内,我也会因“索引 0 超出空数组边界”而崩溃。

我在这里做错了什么?我对 Swift 的可选项、打字和疯狂的 if let wrapping 无处不在感到疯狂......

最佳答案

错误与Optional无关。如果您对数组使用 subscription([]),则必须检查它的长度。

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)
}

关于ios - 如何在 Swift 中分配一个可以为 null 的数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28277239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com