Search code examples
iosswiftfor-loopviewdidload

how to add a array of objects to a for each statement


My code below is trying to add all of the pics declared in the array above to a for each statement. I tried to do pic[0-14] that is declaring a compile error of fatal error index out of range. I dont know why this is happening. I can imagine i have to do pic[0], pic[1], pic[2] etc.

let pic = (0..<15).map { _ in UIImageView() }

   override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    [pic[0-14]].forEach({
        $0.isUserInteractionEnabled = true
               self.view.addSubview($0)
           })}

Solution

  • pic[0-14] is trying to do pic[-14], which is out of range. You should do:

    pic[0...14].forEach({
        $0.isUserInteractionEnabled = true
        self.view.addSubview($0)
    })
    

    Although, I don't see a reason for you to be taking a subrange, so you can do:

    pic.forEach({
        $0.isUserInteractionEnabled = true
        self.view.addSubview($0)
    })
    

    or

    for p in pic {
        p.isUserInteractionEnabled = true
        self.view.addSubview(p)
    }