检查数组是否包含 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
我在 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