기어가더라도 제대로
[SwiftUI-기초] 경고창 - Alert messages 본문
중요한 일이 발생하거나 사용자에게 알릴 필요가 있을 때 alert를 사용한다.
alert를 사용하는 방식 뿐만 아니라 SwiftUI를 관통하는 개념이 하나 있다.
View 는 프로그램 상태의 함수이다.
이게 무슨 말이냐 하면, 뷰가 처음 정의된 대로 정적인 모습을 유지하는 것이 아닌,
뷰가 프로그램의 내부의 상태 변화에 따라 결과값이 변하는 함수에 비유한 것이다.
이런 철학에 빗대어 보았을 때 alert 를 호출하는 방법이 재밌다.
기존 방식에선 "경고창을 보여줘" 라는 투의 명령을 사용했다면, 경고창을 생성하고 어느 조건에 보여줄 지 설정해 놓는다.
그리고 그 조건이 충족되었을 때 경고창을 띄우는 방식이다.
경고 조건
@State private var showingAlert = false
- 위 state 가 true 로 변하면 경고창이 뜨도록 함
- 다시 말해 프로그램의 상태 변화를 뷰에 반영
- 버튼이 눌리면 state 가 true로 변경
- modifier로 달려있는 alert() 가 호출됨
- 여기선 버튼에 modifier로 선언되어있는데 어디에 선언되어있는지 중요한 것은 아님
- alert 내부에 클로저는 버튼을 생성함
- 이 버튼은 기본적으로 경고창 해산을 포함하고, 추가적으로 어떤 일을 할 수 있음
- 위 그림처럼 { } 만 해놓아도 버튼 클릭시 즉시 경고창이 사라짐
다시 말하지만, 경고창을 버튼에 modifier로 선언한다는 것보다
경고창은 이미 만들어져 있고 특정 조건을 충족했을 때 경고창이 보여진다는 것이 중요하다.
.alert("text", isPresented: $showingAlert)
- 앞에 문자열 파라미터는 경고창 메시지
- 위 예제에선 button 에 선언되어있지만 어디에 선언되어있는지는 문제가 안됨
- 뒤에 bool 파라미터는 showingAlert 상태 변화에 따라 경고창을 보여주가 안보여줌
- ture -> 경고창 보여줌
- false -> 경고창 안보여줌
- 양방향 바인딩(two-way binding)을 하고 있는 이유는 경고창이 해산될 때 다시 상태를 false로 되돌려 놓기 위함(링크 첨부)
- 2022.10.06 - [SwiftUI - 기초] - [SwiftUI-기초] 양방향 바인딩(two-way binding), ForEach
[SwiftUI-기초] 양방향 바인딩(two-way binding), ForEach
UI에서 얻는 값을 저장 - 양방향 결합(two-way binding) 이 코드는 오류를 뱉음 TextField 에서 얻을 값을 저장할 공간을 만들어 주지 않았기 때문 struct 내부에 텍스트 필드에서 얻은 값을 저장할 property
damagucci-juice.tistory.com
![]() |
![]() |
잘 작동이 되는 모습을 볼 수 있다.
Button("OK") { }
- 빈 클로저지만 클릭시 alert message 해산은 기본으로 내포되어있음
- 해산과 더불어 어떤 동작을 실행 시킬 것인지 설정
- 버튼의 역할을 여러개로 설정할 수도 있음
- 후행 message 트레일링 클로저를 선언해서 설명란을 만들 수 있다
요약
- 중요한일이나 사용자에게 알릴 필요가 있을 때 alert message 를 사용한다.
- "경고창을 보여줘" 라는 개념보다 "상태가 참일 때 경고창을 띄워줘" 의 개념을 이해해야한다
- 클로저 내부에 버튼은 dismiss 기능은 기본적으로 가지고 있다.
참조
https://www.hackingwithswift.com/books/ios-swiftui/showing-alert-messages
Showing alert messages - a free Hacking with iOS: SwiftUI Edition tutorial
Was this page useful? Let us know! 1 2 3 4 5
www.hackingwithswift.com
'SwiftUI - 기초' 카테고리의 다른 글
[SwiftUI-기초] Modifier 적용 순서가 중요한 이유 (0) | 2022.10.14 |
---|---|
[SwiftUI-기초] View 에 Sturct를 쓰는 이유(+ View의 뒤에는?) (0) | 2022.10.13 |
[SwiftUI-기초] 버튼과 이미지, 레이블 - Button, label and Image (0) | 2022.10.12 |
[SwiftUI-기초] 그라데이션 - Gradients (0) | 2022.10.11 |
[SwiftUI-기초] Material, style, safe area, color (0) | 2022.10.10 |