티스토리 뷰
다음은 제가 코드리뷰를 작성하던 도중 기록하고 싶은 내용이라서 그대로 가져왔습니다.
출발
extension UIViewController {
func makeAlert(title : String,
message : String,
okAction : ((UIAlertAction) -> Void)? = nil,
completion : (() -> ())? = nil)
{
let alertViewController = UIAlertController(title: title, message: message,
preferredStyle: .alert)
let okAction = UIAlertAction(title: "확인", style: .default, handler: okAction)
alertViewController.addAction(okAction)
self.present(alertViewController, animated: true, completion: completion)
}
}
이 메서드의 역할은
- 성공적으로 로그인,회원가입 시 UIAlertAction 에 handler 가 필요
- 성공적이지 않으면 동작을 하지 않기 때문에 handler 가 불필요(그냥 Alert 창이 닫힘)
이라고 생각해요.
그렇다면 alert 창을 만드는 커스텀 메서드를 만들 때 파라미터로 UIAlertAction 의 handler 를 받으면 되겠다! 라는 생각에서 출발해보면 될거같아요.
handler 가 있을수도.. 없을수도.. 그렇다면 옵셔널!
handelr 가 없다면 굳이 함수 호출시에 파라미터를 받지 않아도 되겠다..? 그렇다면 파라미터의 기본값 설정!
이런 생각을 가지고 코드를 다시 한번 살펴보면 좋을거 같아요.
extension UIViewController {
func makeAlert(title : String,
message : String,
❗️okAction : ((UIAlertAction) -> Void)? = nil,
❗️completion : (() -> ())? = nil)
{
let alertViewController = UIAlertController(title: title, message: message,
preferredStyle: .alert)
let okAction = UIAlertAction(title: "확인", style: .default, handler: ❗️okAction)
alertViewController.addAction(okAction)
self.present(alertViewController, animated: true, completion: ❗️completion)
}
}
alertViewController 가 나타나고나서 동작하는 completion 역시 동일하게 생각하면 될거 같아요!
지금은 잘 이해가 안되더라도 구조에 대해서 눈에 담고 넘어가보자구요!
사용해보자!
self.makeAlert(title: "회원가입", message: "회원 가입 성공", okAction: { _ in
self.presentToCheckinViewController()
})
// okAction 과 completion 은 파라미터 기본값을 가지도록 설정했기때문에 다음과 같이 사용 가능.
self.makeAlert(title: "로그인", message: "가입 실패")
_
…???? wirdcard 패턴
_ in 여기서 _이거는 와일드카드라고 불리는 녀석인데요! 👀 _ 쓴 곳은 무시할 수 있다는 것입니다.
음.. 와일드카드 패턴을 통해서 우리는 코드를 좀 더 이쁘고 가독성 높게 짤 수 있는데요. 몇가지를 알아보자구요
// ✅ for 뒤에 오는 변수를 사용하지 않을 경우. 즉, 특정 작업만 두번 반복할 경우에 와일드카드를 사용함으로써 불필요한 변수선언을 막고 특정 작업에 집중할 수 있도록 합니다.
for _ in 1…2 {
// 특정 작업을 두번 반복
}
// 아래의 코드처럼 함수를 사용할 때 파라미터에서 사용하는 경우도 보셨을텐데여!
func function(_ a: Int, _ b: Int) {
}
// ✅ 이럴때는 argument, parameter 라고 구분한답니다. argument 는 함수 외부에서 호출할 때, parameter 는 함수 내부에서 호출할 때 사용해요. 하나면 쓰면 parameter 라고 부르더라구요
// 이렇게 외부에서 호출할 때 파라미터가 무슨 역할을 하는지 무시할 수 있죠! 내부에서는 a와b 로 호출 하면 된답니다.
function(1, 2)
// ✅ 위의 와일드 카드, argument, parameter 를 잘 사용하면 개발자가 함수의 파라미터 역할에 대해서 이해하고 사용하는데 효율적이랍니당
다시돌아와서 우리가 okAction : ((UIAlertAction) -> Void)?
이렇게 선언했어요. 해석하자면? UIAlertAction 을 가지고 Void 를 리턴하겠다. 라는 뜻이거든요?
그래서 okAction 파라미터에 다음과 같이 클로저를 넣었을 때 UIAlertAction 타입을 가지는 변수는 사용할 일이 없기 때문에 와일드 카드를 사용해준 코드입니당. 그리고 Void 를 리턴하기 때문에 원하는 액션을 넣을 수 있었어요
// okAction
{ _ in
// 확인 뷰로 넘어가는 커스텀 메서드
self.presentToCheckinViewController()
}
잠깐. 이대로 끝낼 생각 마라.
okAction : ((UIAlertAction) -> Void)? = nil,
completion : (() -> ())? = nil)
여기서부터 사실 좀 어지러웠어요; 가장 최적의 파라미터의 자료형.. 이건 어떻게 생각을 해내냔말야..!(라고 할뻔 ㅋㅋ)
제가 저렇게 생각을 했어서 남겨볼게요. 단순해요!
여기처럼 주어지잖아요! 이젠 파라미터를 무서워하면서 쓰지 말아보자구요 야호
'iOS' 카테고리의 다른 글
iOS) PHPicker iOS 14+ (0) | 2021.11.15 |
---|---|
iOS) Protocol 생성 시 AnyObject 상속받기 (5) | 2021.11.11 |
iOS) Xib 로 만든 커스텀뷰에서 액션 연결 (0) | 2021.11.06 |
iOS) Dynamic Type (2) | 2021.11.05 |
iOS) UIButton.Configuration in iOS 15 (6) | 2021.11.03 |
- MVVM
- RxCocoa
- projectsetting
- Objective-C
- WWDC
- CloneCoding
- rxswift
- Algorithm
- urlsession
- MOYA
- YPImagePicker
- async/await
- 2022 KAKAO TECH INTERNSHIP
- containerBackground
- configurable widget
- SwiftUI
- Widget
- OpenSourceLibrary
- 서버통신
- Protocol
- Notification
- github
- WidgetKit
- IOS
- UserDefaults
- watchOS
- Swift
- WWDC22
- APNS
- Firebase
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Total
- Today
- Yesterday