检查数组是否包含 Swift 中的索引值

Check if array contains an index value in Swift

我在 plist 中有一个包含 2 个整数值的数组。我可以使用此代码毫无问题地读取第一个值

let mdic = dict["m_indices"] as? [[String:Any]]
var mdicp = mdic?[0]["powers"] as? [Any]
self.init(
     power: mdicp?[0] as? Int ?? 0
)

不幸的是,一些 plist 没有第二个索引值。所以调用这个

power: mdicp?[1] as? Int ?? 0

return 无。我如何检查那里是否有索引,以便它只在存在值时获取值?我试图将它包装在一个 if-let 语句

        if let mdicp1 = mdic?[0]["powers"] as? [Any]?, !(mdicp1?.isEmpty)! {
        if let mdicp2 = mdicp1?[1] as! Int?, !mdicp2.isEmpty {
            mdicp2 = 1
        }
    } else {
        mdicp2 = 0
    }

但到目前为止我的尝试导致了多个控制台错误。

试试这个

if mdicp.count > 1,
   let mdicpAtIndex1 = mdicp[1] {
  /// your code
}

mdicp 可能包含 "n" 个具有可选值的元素,因此您必须在解包之前进行可选绑定以避免崩溃。

例如,如果我初始化容量为 5 的数组

var arr = [String?](repeating: nil, count: 5)

print(arr.count)   /// it will print 5
if arr.count > 2 {
      print("yes") /// it will print
}

if arr.count > 2,
   let test = arr[2] { // it won't go inside
    print(test)
}

///if I unwrap it
print(arr[2]!)  /// it will crash

如果您正在处理整数数组并且只担心前两项,您可以这样做:

let items: [Int] = [42, 27]
let firstItem  = items.first ?? 0
let secondItem = items.dropFirst().first ?? 0

您是否真的想使用 nil 合并运算符 ?? 来使缺失值计算为 0,或者只是将它们保留为可选项,这取决于您。

或者你可以这样做:

let firstItem  = array.count > 0 ? array[0] : 0
let secondItem = array.count > 1 ? array[1] : 0