일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Refactoring
- clean architecture
- 스위프트
- UITextView
- map
- Xcode
- SWIFT
- Observable
- ribs
- 애니메이션
- 리펙터링
- rxswift
- Human interface guide
- 리팩토링
- tableView
- Protocol
- combine
- 리펙토링
- uiscrollview
- RxCocoa
- UICollectionView
- HIG
- Clean Code
- uitableview
- swiftUI
- ios
- collectionview
- MVVM
- swift documentation
- 클린 코드
- Today
- Total
목록ios (1094)
김종권의 iOS 앱 개발 알아가기
@State 사용 케이스@State는 뷰에서 접근하는 프로퍼티struct ContentView: View { @State private var inputText = "" @State private var onAppear = false var body: some View { VStack { TextField(text: $inputText) { Text("placeholder...") } .onAppear { onAppear = true } if onAppear { Text(..
@StateObject와 @ObservedObject 개념@StateObject와 @ObservedObject 모두 ObservableObject 모델을 옵저빙할 때 사용class MyViewModel: ObservableObject { @Published var count = 0}@StateObject var viewModel = MyViewModel()@ObservedObject var viewModel = MyViewModel()차이점?@ObservedObject 기능: 뷰가 다시 그려질 때, 뷰 내부에 @ObservedObject 모델을 두면 초기화됨@StateObject 기능: 뷰가 다시 그려질 때, 뷰 내부에 @StateObject 모델을 두어도 데이터가 유지됨뷰 상태관리 방법뷰를 사용..
@ViewBuilder 기능 알아보기@ViewBuildervar myView: some View { Text("ex")}@ViewBuilder는 @resultBuilder 기능처럼 return키워드와 콤마를 안쓰고 심플하게 반환할 수 있음*resultBuilder개념은 이전 포스팅 글 참고// resultBuilder를 사용한 경우 - 콤마 존재 x@PersonBuilderfunc getPerson() -> [Person] { Person(name: "jake", age: 20) // return 키워드를 사용하지 않아도 동작 Person(name: "kim", age: 22) Person(name: "paul", age: 32)}하지만 @ViewBuilder를 단순히 @resultBuilde..
붙여넣기 권한 팝업iOS 16.0부터 OS에서 제공개발자가 UIPasteboard.general.string과 같이 복사된 텍스트를 불러올 때 팝업이 등장팝업이 나오는 이유: 사용자 동의 없이 복사된 텍스트에 접근하지 못하도록 하기 위함단, TextField에서 long press하여 붙여넣기 할때는, 암묵적으로 사용자가 동의한 것으로 간주하기 때문에 위 팝업이 등장 x아래에서 살펴볼 설정 앱에서 붙여넣기 권한을 거부 할 수 있는데, 거부하더라도 사용자가 long press하여 붙여넣기하는 것은 허용됨팝업 옵션에 따른 동작붙여넣기 허용 안 함 -> UIPasteboard.general.string 값이 nil붙여넣기 허용 -> UIPasteboard.general.string으로 pasteboard에 복..
뷰 데이터 넘기기parentView -> childView 데이터를 넘겨주는 방법1) @State와 Binding으로 넘겨주기 (양방향 바인딩)2) EnvironmentObject를 사용하여 넘겨주기 (양방향 바인딩)1) @State와 Binding으로 넘겨주기@State 프로퍼리를 부모 뷰에 놓고, 달러 $를 붙여서 자식 뷰에 Binding 형태 프로퍼티를 넘겨주기양방향 바인딩ChildView에서 childText를 변경하면 parentText도 같이 변경되고, parentText가 변경되면 childText도 변경됨struct ContentView: View { @State private var parentText = "parent_text" var body: some View { ..
@State 프로퍼티@State를 붙인 프로퍼티의 값이 변경되면 자동으로 이것을 사용하고 있는 뷰들이 다시 그려는 기능* 뷰들이 다시 그려는 기능: 해당 뷰가 다시 그려질 때 init도 다시 호출되는것을 주의@State var text = ""var body: some View { Text(text)}@State 사용 시 주의사항@State의 용도는 View내부에서 프로퍼티를 변경시킬때만 사용해야함init이나 메소드에서 @State를 변경해도 @State값이 변경되지 않음ex) init에서 text를 초기화해주어도 text값이 변경되지 않음struct ContentView: View { var body: some View { VStack { ChildView(t..
Text에 Lottie 넣기Text에 정적인 이미지를 넣는 방법은 기존 방법이 존재NSTextAttachment를 사용하여 AttributedText를 Text 컴포넌트에 대입하는 방법Text에 바로 이어 붙이는 방법하지만 Lottie와 같은 애니메이션을 Text에 넣는 방법은 알려진 방법이 xText에 Lottie 넣는 아이디어Text와 LottieView를 붙이는 것문자열이 있을때, 이 문자열을 띄어쓰기 단위로 쪼개고 Lottie를 넣고 싶은 위치 혹은 문자열을 정하여 그 옆에 LottieView를 넣는 것구조// Lottie를 마지막에 넣고싶고, 문구가 들어갈 뷰의 width를 200라 할 경우 아이디어VStack { 문자열을 " " 단위로 분해하여 배열로 나누기 라인별로 들어갈 문자열을 나누어..
@ObservedObject 사용 요건ObservableObject 모델을 사용할 때 아래 에러를 마주치는 경우가 존재바로 @ObservedObject를 선언한 프로퍼티는 프로토콜이 아닌 구체적인 타입을 사용해야함struct ContentView: View { // error: Type 'any Personable' cannot conform to 'ObservableObject' @ObservedObject var person: Personable var body: some View { HStack { } }}protocol Personable where Self: ObservableObject { var name: String { get }..