728x90
https://stackoverflow.com/questions/24805180/swift-put-multiple-iboutlets-in-an-array
IBOutlet Collections
- 간단히 말하자면 같은 타입의 여러 개의 IBOutlet property들을 하나의 배열로 만들어 놓은 것이라고 보면 된다.
- ex) @IBOutlet var buttons: [UIButton]!
- 여러 개의 동일한 타입의 객체들이 xib에서 여러 개가 있을 때, 중복을 줄이고 재사용성을 높일 수 있는 방법이다.
사용 예시
이런 식으로 각각의 버튼이 중앙에 있는 정사각형 UIView의 배경색을 바꾸는 역할을 한다고 가정해보겠다.
1. Collection을 쓰지 않는 경우
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var redButton: UIButton!
@IBOutlet weak var blueButton: UIButton!
@IBOutlet weak var greenButton: UIButton!
@IBOutlet weak var centerView: UIView!
let colors: [UIColor] = [.red, .blue, .green]
override func viewDidLoad() {
super.viewDidLoad()
redButton.addTarget(self, action: #selector(colorButtonClicked(_:)), for: .touchUpInside)
blueButton.addTarget(self, action: #selector(colorButtonClicked(_:)), for: .touchUpInside)
greenButton.addTarget(self, action: #selector(colorButtonClicked(_:)), for: .touchUpInside)
redButton.tag = 0
blueButton.tag = 1
greenButton.tag = 2
}
@objc
func colorButtonClicked(_ sender: UIButton) {
let index = sender.tag
centerView.backgroundColor = colors[index]
}
}
만약 collection을 사용하지 않는다면 최소 3개의 IBOutlet button 프로퍼티와 각각의 Button들에 target-action 메커니즘을 적용하는 코드들이 필요하다.
2. Collection을 쓴 경우
import UIKit
class ViewController: UIViewController {
@IBOutlet var buttons: [UIButton]!
@IBOutlet weak var centerView: UIView!
let colors: [UIColor] = [.red, .blue, .green]
override func viewDidLoad() {
super.viewDidLoad()
for index in 0 ..< buttons.count {
buttons[index].addTarget(self, action: #selector(colorButtonClicked(_:)), for: .touchUpInside)
buttons[index].tag = index
}
}
@objc
func colorButtonClicked(_ sender: UIButton) {
let index = sender.tag
centerView.backgroundColor = colors[index]
}
}
다음과 같이 Collection을 써서 하나의 배열로 사용한다면 불필요한 중복 코드들을 줄일 수 있다.
728x90
'iOS > 설명' 카테고리의 다른 글
[iOS] IPA 파일 (0) | 2022.08.02 |
---|---|
[iOS] Framework vs Library (0) | 2022.08.01 |
[iOS] setContentOffset의 animation 시간 조절하기 (0) | 2022.07.25 |
[iOS] UIView LifeCycle 생명주기 (0) | 2022.07.18 |
[iOS] Public Beta vs Developer Beta (0) | 2022.07.17 |
댓글