我在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
}
但到目前为止我的尝试已经让多个控制台错误。
答案 0 :(得分: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
答案 1 :(得分: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