분류 전체보기
[SwiftUI] Tutorials3. Handling User Input
Landmarks앱에서 사용자는 즐겨찾는 장소를 즐겨찾기하고, 즐겨찾기만 표시하도록 목록을 필터링할 수 있다. 이 기능을 만들려면 먼저 스위치를 목록에 추가하여 사용자가 즐겨찾기 한 항목들만 볼 수 있게 한 다음 사용자가 탭 하여 랜드마크를 즐겨찾기로 표시하는 별 모양의 버튼을 추가한다. 즐겨찾기 표시하기 사용자에게 즐겨찾기를 한눈에 보여줄 수 있도록 목록을 향상시키는 것 부터 시작한다. 각 LandmarkRow에 즐겨찾는 랜드마크를 표시하는 별표를 추가한다. LandmarkRow.swift파일을 수정한다. 현재 랜드마크가 즐겨찾기 항목인지 확인하기 위해 spacer뒤 if문 안에 별 이미지를 추가한다. SwiftUI는 if문을 사용하여 조건부로 뷰를 포함시킨다. struct LandmarkRow: Vi..
[SwiftUI] Tutorials 2. Building List and Navigation
첫 튜토리얼에서는 사용자에게 보여줄 정보를 하드코딩 했다. 이번 튜토리얼에서는 데이터를 저장하는 모델을 만들어서 사용한다. https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation Apple Developer Documentation developer.apple.com 우선 프로젝트 파일을 다운받아 리소스폴더의 landmarkData.json을 프로젝트에 드래그 앤 드랍한다. 그리고 Landmark라는 이름의 Swift파일을 생성하고 구조체를 만들어 준다. struct Landmark: Hashable, Codable{ var id: Int var name: String var park: String var state: Str..
[SwiftUI] Tutorials 1. Creating and Combining View
XCode에서 App을 선택하고 Product Name: Landmarks Interface: Swiftui Language: Swift를 선택한다. 기본적으로 SwiftUI는 두 개의 구조체를 선언합니다. 첫 번째 구조체는 View프로토콜을 따르며 View의 콘텐츠 및 레이아웃을 정의합니다. 두 번째 구조체는 첫 번째 구조체에 대한 Preview를 선언합니다. Preview에서 Hello, World를 Command-클릭하면 구조화된 편집 팝오버를 띄우고 Show SwiftUI Inspector를 선택합니다. Inspector에서 텍스트를 Turttle Rock를 변경하고, font를 title로 변경합니다. foregroundColor를 변경하려면 텍스트 상에서 .foregroundColor(.gre..
[Swift] 프로퍼티(Property) 저장, 지연저장, 연산, 읽기 전용 연산,
프로퍼티(Property) 저장 프로퍼티(Stored Properties) 연산 프로퍼티(Computed Properties) 타입 프로퍼티(Type properties) 저장프로퍼티 저장프로퍼티는 클래스나 구조체에서 변수나 상수를 저장하는 가장 단순한 프로퍼티이다. 기본 형태 struct person1{ let name: String = "jake" //상수 저장 프로퍼티 var age: Int = 20 //변수 저장프로퍼티 } class person2{ let name: String = "jake" var age: Int = 20 //이니셜라이저 지정 // 초기값을 지정하지 않았거나, 지정했더라도 후에 값 변경이 있을 경우 이니셜라이저를 지정해주어야 한다. init(age: Int){ self.age..
[iOS] UserDefault를 활용한 저장, struct형태 저장, 구조체 배열 저장, 로드
UserDefaults의 원리 - 저장: 요청 > struct 객체 > Data형 > 메모리, 디스크에 저장 * 아카이빙: 객체를 Data형과 같이 바이트 형태로 변경하는 작업이며 객체를 메모리, 디스크에 저장할 수 있는 파일 형시으로 만드는 것 - 로드: 요청 > 메모리, 디스크에 저장된 형태 탐색 > Data형 > struct객체로 변환 > 획득 * 언아카이빙: 메모리, 디스크에 저장된 Data형태의 바이트 형태를 스위프트의 struct 객체외 같은 형태로 변경하는것. 기본 타입인 Int, Double, String은 아카이빙, 언아카이빙이 내부적으로 UserDefaults를 사용할 때 적용이 되어서 바로 사용 가능하지만, struct같은 사용자 지정 타입의 경우 아카이빙, 언아카이빙 작업이 별도로 ..
[SwiftUI] DatePicker
SwiftUI의 DatePickerView는 UIKit의 DatePicker와 유사하며, 모양과 작동 방식을 제어하기 위한 다양한 옵션과 함께 제공된다. 값을 저장하는 모든 컨트롤과 마찬가지로 앱의 특정 @State에 바인딩되어야 한다. struct ContentView: View { @State private var wakeUp = Date() var body: some View { //텍스트를 "" = empty로 지정할 수 있다. DatePicker("날짜를 선택하세요", selection: $wakeUp) //여기까지가 기본 code //Mark: 피커 스타일 (wheel) .datePickerStyle(WheelDatePickerStyle()) } } DatePicker의 레이블 텍스트를 안보이..
[SwiftUI] @State와 @Binding
SwiftUI는 구조체에서 View프로토콜을 구현하여 View(사용자화면)을 다룬다. Xcode에서 프로젝트를 만들 때 SwiftUI를 선택하면 ContentView구조체가 생성되고 여기서 뷰를 다룬다. 이 ContentView에서 var키워드로 선언한 프로퍼티의 값을 body프로퍼티 내에서 변경하려고 하면 에러가 뜬다. Swift의 구조체에서 mutating으로 선언되지 않은 연산프로퍼티는 구조체 내부에서 그 값의 변경이 불가능하다. 그러면 연산 프로퍼티인 body를 mutating으로 선언해주면 되는가? 아니다. View프로토콜의 body프로퍼티는 { get } 으로 되어있으며, 이는 nomutating으로 구현을 요구한다. 이 때 변수변경은 @State라는 속성을 이용하면 된다. 프로퍼티에 @Sta..
[SwiftUI] TextEditor
여러줄의 텍스트를 입력받기 위해서는 TextEditor를 사용하면 된다. struct ContentView: View{ @State var text: String = "" var body: some View{ VStack{ TextEditor("Enter name", text: $text) .pdding() .backgrount(Color(uiColor: .secondarySystemBackgrount)) Text("\(text)") } } }
[SwiftUI] TextField
TextField는 Text의 입력을 읽어오기 위한 component이다. TextField의 인자값으로 @State로 선언된 변수를 넣어주면, 변수에 텍스트가 입력된다. struct ContentView: View{ @State var name: String = "" var body: some View{ VStack{ TextField("Enter name", text: $name) .pdding() .backgrount(Color(uiColor: .secondarySystemBackgrount)) Text("Hello \(name)") } } } Secure TextField 사용하기 Secure Textfield는 입력되는 텍스트의 값을 보호해주기 때문에 암호와 같은 텍스트를 입력 받을 때 사용된다..
[SwiftUI] NavigationView
NavigationView는 UIKit의 UINavigationController역할을 한다. 보여주고싶은 View를 NavigationView로 감싸주기만 하면 된다. struct navigationTest: View{ var body: some View{ NavigationView{ Text("Hello") } } } 추가를 하면 NavigationBarTitle이나 NavigationItem을 추가해줘야 GNB영역이 나오게 된다. NavigationBarTitle을 보여주는 방법 struct navigationTest: View{ var body: some View{ NavigationView{ Text("Hello") .navigationBarTitle("clamp", displayMode: .i..