检查 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:) 语法生成随机 Ints:

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)
}

如果 pepBoysnil 或为空,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)
}