티스토리 뷰
오늘은 저도 첫 번째 스터디를 통해 배운 너무나 유용한 기능,,,
물론 아직은 기초 단계지만! 제가 배운 걸 적어보겠습니당!
foreach는 고차함수라고 배웠는데 알고보니, 메서드네여?!
배열의 각 아이템(요소)을 잘 활용하여 각 아이템(요소)별로 특정 작업을 실행합니다.
어떠한 작업을 할지는 클로저를 통해 개발자가 정해주면 되겠습니다.
이렇게 말해도 무슨 말인지 잘 모르겠쥬?
저 또한 몰랐으니까요?
그래서 간단한 예제를 통해 보여드리도록 하겠습니다.
오늘의 예제는 3개의 레이블을 뷰에 올려보는 간단한 예제입니당.
레이블들을 뷰에 올릴 때 공통으로 해줄 작업이 있져?
바로 addSubview 작업과 오토레이아웃 작업입니다.
이때 foreach문을 쓰면 코드가 엄청 간결해지더라구요!
우선 저의 가장 첫 번째 글이었던, 버튼을 누르면 뷰가 바뀌었던 예제의 코드를 가져와볼게요.
//
// ViewController.swift
// ViewChange
//
// Created by 순진이 on 2021/10/27.
//
import UIKit
import SnapKit
class ViewController: UIViewController {
let redButton = UIButton()
let blueButton = UIButton()
let greenButton = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
redButton.setTitle("", for: .normal)
redButton.backgroundColor = .red
redButton.layer.cornerRadius = 10
view.addSubview(redButton)
redButton.addTarget(self, action: #selector(redBtnTapped(_:)), for: .touchUpInside)
blueButton.setTitle("", for: .normal)
blueButton.backgroundColor = .blue
blueButton.layer.cornerRadius = 10
view.addSubview(blueButton)
blueButton.addTarget(self, action: #selector(blueBtnTapped), for: .touchUpInside)
greenButton.setTitle("", for: .normal)
greenButton.backgroundColor = .green
greenButton.layer.cornerRadius = 10
view.addSubview(greenButton)
greenButton.addTarget(self, action: #selector(greenBtnTapped), for: .touchUpInside)
redButton.translatesAutoresizingMaskIntoConstraints = false
blueButton.translatesAutoresizingMaskIntoConstraints = false
greenButton.translatesAutoresizingMaskIntoConstraints = false
//오토레이아웃 생략
}
//버튼 이벤트 설정 코드 생략,,,
//@objc func redBtnTapped(_ button: UIButton) { 생략 }
//@objc func blueBtnTapped(_ button: UIButton) { 생략 }
//@objc func greenBtnTapped(_ button: UIButton) { 생략 }
}
이 긴 코드를 foreach를 이용해 어떻게 바꿀 수 있냐!
//
// ViewController.swift
// ViewChange
//
// Created by 순진이 on 2021/10/27.
//
import UIKit
import SnapKit
class ViewController: UIViewController {
let redButton = UIButton()
let blueButton = UIButton()
let greenButton = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
redButton.backgroundColor = .red
redButton.addTarget(self, action: #selector(redBtnTapped(_:)), for: .touchUpInside)
blueButton.backgroundColor = .blue
blueButton.addTarget(self, action: #selector(blueBtnTapped), for: .touchUpInside)
greenButton.backgroundColor = .green
greenButton.addTarget(self, action: #selector(greenBtnTapped), for: .touchUpInside)
setBasic()
//foreach 활용
func setBasic() {
[redButton, blueButton, greenButton].foreach { (Btn) in
Btn.setTitle("", for: .normal)
Btn.layer.cornerRadius = 10
view.addSubview(Btn)
Btn.translatesAutoresizingMaskIntoConstraints = false
}
//오토레이아웃 생략
}
//버튼 이벤트 설정 코드 생략,,,
//@objc func redBtnTapped(_ button: UIButton) { 생략 }
//@objc func blueBtnTapped(_ button: UIButton) { 생략 }
//@objc func greenBtnTapped(_ button: UIButton) { 생략 }
}
setBasic이라는 함수를 만들어 거기서 전부 설정해 보았어요.
배열에 있던 세 가지 버튼을 하나씩 뽑아서 개발자가 정한 작업을 해주게 됩니다.
그러니까, 공통된 아래 가지 작업을 버튼을 하나씩 뽑아 실행하게 되는거죠
redButton.setTitle
redButton.layer.cornerRadius
view.addSubview(redButton)
translatesAutoresizingMaskIntoConstraints = false
엄청 간결해지지 않나요?
아규먼트로 썼던 (Btn)과 in도 생략할 수 있기 때문에 더 간략하게 작성할 수도 있답니다.
이때는 생략하는 대신 $0라고 써주면 됩니다.
두 번째 파라미터는 $1, 세 번째는 $2으로 써주면 되구요!
//foreach 활용
func setBasic() {
[redButton, blueButton, greenButton].foreach {
$0.setTitle("", for: .normal)
$0.layer.cornerRadius = 10
view.addSubview($0)
$0.translatesAutoresizingMaskIntoConstraints = false
}
오늘의 짧은 정리 끝!
'iOS 기초' 카테고리의 다른 글
[swift] App의 LifeCycle (0) | 2022.02.26 |
---|---|
[swift] ViewController의 Lifecycle (0) | 2022.02.09 |
[swift] x-code에서 dark mode, light mode 배경 따로 설정하기 (0) | 2022.01.07 |
[swift] 스토리보드 없이 UITabBarController 구현 (in code) (0) | 2021.12.04 |
[swift] NavigationController (0) | 2021.11.30 |
- Total
- Today
- Yesterday