본문 바로가기

SwiftUI

(7)
SwiftUI] StateObject, Published, ObservableObject https://www.hackingwithswift.com/books/ios-swiftui/sharing-swiftui-state-with-stateobject swiftui 에서 struct 인스턴스 변수는 간단한 @State 로 (내부 프로퍼티의) 변경을 감지하여 UI에 반영할 수 있다. 하지만 class 인스턴스 변수는 @State 를 붙여도 내부 프로퍼티의 변경을 감지하지 못한다. class 의 내부 프로퍼티의 변경을 감지하도록 하는 방법은 다음과 같다. 1. 외부에서 변경을 감지하려는 클래스의 프로퍼티에 @Published 를 붙여준다. class User { @Published var name: String = "Micky" @Published var age: Int = 10 } 2. view..
[SwiftUI] @State, struct, class https://www.hackingwithswift.com/books/ios-swiftui/why-state-only-works-with-structs why state only works with structs 라는 제목의 강의. swiftui 에서 변경될 수 있는 변수에 @State 를 붙이는 것에 익숙해졌다. 이 @State 변수에는 스위프트의 기본 형 뿐만 아니라, 사용자형도 사용할 수 있다. 다음과 같다. struct User { var firstName = "Bilbo" var lastName = "Baggins" } struct ContentView: View { @State private var user = User() var body: some View { VStack { VStack {..
SwiftUI : Primes Numbers 아주 간단하게 최초 100개의 소수를 구하는 swiftui 프로그램. 최초에 2 이상인 100개의 정수가 화면에 나열됨. 각 숫자 버튼을 누르면, 누른 숫자의 배수들을 제거함. 2부터 하나씩 버튼을 눌르면, 남아있는 숫자들이 소수들. import SwiftUI struct ContentView: View { @State private var primes = Array(2...30000) @State private var clicked = Set() var body: some View { VStack { ForEach(0..
100DaysOfSwiftUI - Day 24 마지막 과제가 아래와 같다. 커스텀 ViewModifier (와 View extension) 을 만드는데, 글씨체를 크고 푸른색으로 만들어 프로미넌트타이틀에 적당하게 바꾸는 모디파이어. Create a custom ViewModifier (and accompanying View extension) that makes a view have a large, blue font suitable for prominent titles in a view. 작성한 코드는 아래와 같다. import SwiftUI struct ProminentTitle : ViewModifier { func body(content: Content) -> some View { content .font(.largeTitle.bold()) ...
100DaysOfSwiftUI - Day 23 스위프트UI의 뷰는 class 가 아닌 struct 이다. 단순하다. 클래스 구조는 기본 클래스에도 자주 사용되지 않는 수많은 프로퍼티들이 달려있고, 이 기본 클래스를 상속받는 모든 뷰들도 이들을 다 가지고 있다. 스위프트UI의 뷰에 모디파이어가 붙으면, 이전에 만들어진 뷰에 대해 수정된 뷰가 된다. struct ContentView: View { var body: some View { Button("Hello") { print(type(of: self.body)) } .padding() .frame(width: 300, height: 100) .background(.yellow) } } 단순한 버튼에, padding, frame, background 3개의 모디파이어가 붙어 모양이 변경된 뷰. 클릭 이..
100DaysOfSwiftUI - Day 19 간단한 컨버터 어플리케이션을 만들라는 숙제. 제곱미터를 평으로, 평을 제곱미터로 변환하는 macOS 어플리케이션을 작성하 보았다. 막상 만들어보려니 간단한 TextField, Text, Picker 의 사용법도 헷갈렸다. 아주 무식한 코드는 다음과 같다. import SwiftUI struct ContentView: View { @State private var fromValue : Double = 0 @State private var fromUnit = "제곱미터" @State private var toUnit = "평" @State private var toValue : Double = 0 var toValue_ : Double { if fromUnit == toUnit { return fromVal..
100DaysOfSwiftUI - Day 16 WeSplit 첫번째 프로젝트 var body: some View { } 는 swift 문법적으로는 computed property 인 것 같다. @State 를 추가하여, immutable 프로퍼티를 변경이 가능하도록 만들어준다. struct 가 아닌 다른 어느 곳에 저장한다고 하는데... 어딜까. @State 를 추가하지 않고, 버튼핸들러에서 프로퍼티를 변경하려 하면, View 가 immutable 이기 때문에 에러메시지가 발생하는 걸 보여주는 설명이 참 좋았다. 안그랬으면 그냥 그런갑다 하고 넘어갔을 것. https://daewonyoon.tistory.com/440