如何在另一个数组中获取数组元素?

时间:2016-10-02 13:25:09

标签: arrays swift

因此,我能想到实现这一目标的唯一方法是将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)
    }

2 个答案:

答案 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数组,第二种方法会返回一个非可选的空数组