因此,我能想到实现这一目标的唯一方法是将mainArray中的数组放入变量中,然后对其进行索引。有更简单的方法吗?
mainArray = [ 3400, "Overwatch", [UIButton(), UIButton()]] // Some buttons already made
currentButtonArray = mainArray[mainArray.count - 1] as! NSArray
for i in 0..<currentButtonArray.count {
buttonArray.append( currentButtonArray[i] as! UIButton)
}
答案 0 :(得分:1)
如果子阵列属于所有类型,则可以一次性追加所有类型:
var buttonArray = [UIButton]()
let mainArray:[Any] = [3400, "Overwatch", [UIButton(), UIButton()]] // Some buttons already made
if let currentButtonArray = mainArray.last as? [UIButton] {
buttonArray.append(contentsOf: currentButtonArray)
}
或者你可以写一下:
guard let currentButtonArray = mainArray.last as? [UIButton] else {
// do something e.g. return or break
fatalError()
}
// do stuff with array e.g. currentButtonArray.count
如果您不知道嵌套UIButton数组的数组中的位置,或者如果有多个嵌套按钮数组,那么这将起作用:
let buttonArray = mainArray.reduce([UIButton]()){ (array, element) in if let bArray = element as? [UIButton] {
return array + bArray
}
else {
return array
}
}
注意:这是Swift 3代码。
答案 1 :(得分:1)
如果一个数组仅包含UIButton
个实例,则只需filter
个。
let mainArray : [Any] = [3400, "Overwatch", [UIButton(), UIButton()]]
if let buttonArray = mainArray.filter({$0 is [UIButton]}).first as? [UIButton] {
print(buttonArray)
}
或
let buttonArray = Array(mainArray.flatMap{$0 as? [UIButton]}.joined())
如果UIButton
mainArray
数组,第二种方法会返回一个非可选的空数组