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

标签 ios arrays swift indexing nsarray

我在 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

返回零。我如何检查那里是否有索引,以便它只在存在值时获取值?我试图将它包装在一个 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
    }

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

最佳答案

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

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

关于ios - 检查数组是否包含 Swift 中的索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41630944/

相关文章:

ios - 通过地址或GPS坐标获取最近的商家名称/类型

ios - 在 iOS 应用程序上发送 MIDI 信息时出现问题

c++ - 重新增长数组时出错:写入时缓冲区溢出

java - 在 JDBC/PostgreSQL 中使用 SQL 数组类型更新结果集

iphone - 将下载的数据放入字典的最佳方法

ios - 沿着 UIBezierPath 放置 `points`,使得 `center` 点位于路径上

javascript - 获取对象数组中的所有参数

ios - 如何使用 SwiftUI 显示警报

ios - 如何将数据发送到 ios Swift 中的自定义标签栏 Controller

ios - 使用 Swift 以不同名称保存文件