목록SwiftUI (51)
기어가더라도 제대로

1. 성능상의 이유 Class라고 하면 상속간에 받는 모든 속성과 프로퍼티가 UIView 마다 상속됨 UILabel, UIButton, 등 생각해보면 많은 것들이 UIView나 UIControl로 부터 상속받는다. UIView 의 경우 합이 약 200개의 속성과 메서드를 물려받는다. Struct는 보이는 코드가 전부임 View가 Struct 인 이유임 2. 변수를 깔끔하게 변경하기 위해 Class 는 인스턴스가 let으로 선언되어 있어도 내부 프로퍼티가 var면 변경 가능 struct는 인스턴스가 let으로 선언되어 있다면 내부 프로퍼티가 var여도 변경 불가능 시스템 사용중에 상태 변경이 가능한 프로퍼티를 @State로 선언해서 변경가능성을 열어줌 3. View 의 뒤에는 뭐가 있을까? "아무것도 없다..

중요한 일이 발생하거나 사용자에게 알릴 필요가 있을 때 alert를 사용한다. alert를 사용하는 방식 뿐만 아니라 SwiftUI를 관통하는 개념이 하나 있다. View 는 프로그램 상태의 함수이다. 이게 무슨 말이냐 하면, 뷰가 처음 정의된 대로 정적인 모습을 유지하는 것이 아닌, 뷰가 프로그램의 내부의 상태 변화에 따라 결과값이 변하는 함수에 비유한 것이다. 이런 철학에 빗대어 보았을 때 alert 를 호출하는 방법이 재밌다. 기존 방식에선 "경고창을 보여줘" 라는 투의 명령을 사용했다면, 경고창을 생성하고 어느 조건에 보여줄 지 설정해 놓는다. 그리고 그 조건이 충족되었을 때 경고창을 띄우는 방식이다. 경고 조건 @State private var showingAlert = false 위 state..

모든 버튼은 저마다의 역할을 지니고 있다. 클로저나 함수로 역할 설정 가능 버튼이 눌렸을 때 실행하는 동작 Button("Delete selection") { print("Now deleting…") .... struct ContentView: View { var body: some View { Button("Delete selection", action: executeDelete) } func executeDelete() { print("Now deleting…") } } 버튼의 외형 설정 - role, style "버튼이 하는 일이 파괴적이다" 라고 역할을 부여 그에 따른 외형도 변함 style의 role과 조합하여 사용 가능 너무 많은 prominent button 은 사용하지 않는 것을 권장 La..