检查 Swift 中的可选数组是否为空
Check if optional array is empty in Swift
我知道有很多关于 SO 的问题和关于这个的答案,但出于某种原因,我无法解决任何问题。我想要做的就是测试一个数组是否至少有一个成员。出于某种原因,Apple 在 Swift 中使这个变得复杂,不像 Objective-C 中你刚刚测试了 if count>=1
。数组为空时代码崩溃。
这是我的代码:
let quotearray = myquotations?.quotations
if (quotearray?.isEmpty == false) {
let item = quotearray[ Int(arc4random_uniform( UInt32(quotearray.count))) ] //ERROR HERE
}
但是,我得到一个错误:
Value of optional type '[myChatVC.Quotation]?' must be unwrapped to refer to member 'subscript' of wrapped base type '[myChatVC.Quotation]'.
链接或强制解包的修复选项都无法解决错误。我也试过:
if array != nil && array!. count > 0 and if let thearray = quotearray
但这些都不起作用
感谢您的任何建议。
您可以打开可选数组并像这样使用它,也可以使用新的 Int.random(in:)
语法生成随机 Int
s:
if let unwrappedArray = quotearray,
!unwrappedArray.isEmpty {
let item = unwrappedArray[Int.random(in: 0..<unwrappedArray.count)]
}
randomElement
已经存在了,不要再造轮子了:
var pepBoys: [String]? = ["manny", "moe", "jack"]
// ... imagine pepBoys might get set to nil or an empty array here ...
if let randomPepBoy = pepBoys?.randomElement() {
print(randomPepBoy)
}
如果 pepBoys
为 nil
或为空,if let
将安全失败。
我建议使用 guard 语句
guard let array = optionalArray, !array.isEmpty else { return }
检查第一个元素是否存在
var arr: [Int]? = [1, 2, 3, 4]
if let el = arr?.first{
print(el)
}
我知道有很多关于 SO 的问题和关于这个的答案,但出于某种原因,我无法解决任何问题。我想要做的就是测试一个数组是否至少有一个成员。出于某种原因,Apple 在 Swift 中使这个变得复杂,不像 Objective-C 中你刚刚测试了 if count>=1
。数组为空时代码崩溃。
这是我的代码:
let quotearray = myquotations?.quotations
if (quotearray?.isEmpty == false) {
let item = quotearray[ Int(arc4random_uniform( UInt32(quotearray.count))) ] //ERROR HERE
}
但是,我得到一个错误:
Value of optional type '[myChatVC.Quotation]?' must be unwrapped to refer to member 'subscript' of wrapped base type '[myChatVC.Quotation]'.
链接或强制解包的修复选项都无法解决错误。我也试过:
if array != nil && array!. count > 0 and if let thearray = quotearray
但这些都不起作用
感谢您的任何建议。
您可以打开可选数组并像这样使用它,也可以使用新的 Int.random(in:)
语法生成随机 Int
s:
if let unwrappedArray = quotearray,
!unwrappedArray.isEmpty {
let item = unwrappedArray[Int.random(in: 0..<unwrappedArray.count)]
}
randomElement
已经存在了,不要再造轮子了:
var pepBoys: [String]? = ["manny", "moe", "jack"]
// ... imagine pepBoys might get set to nil or an empty array here ...
if let randomPepBoy = pepBoys?.randomElement() {
print(randomPepBoy)
}
如果 pepBoys
为 nil
或为空,if let
将安全失败。
我建议使用 guard 语句
guard let array = optionalArray, !array.isEmpty else { return }
检查第一个元素是否存在
var arr: [Int]? = [1, 2, 3, 4]
if let el = arr?.first{
print(el)
}