| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 | 31 |
- tableView
- swiftUI
- rxswift
- 스위프트
- 리펙토링
- map
- RxCocoa
- UICollectionView
- scrollview
- SWIFT
- ios
- ribs
- HIG
- swift documentation
- 애니메이션
- MVVM
- Xcode
- uitableview
- 클린 코드
- UITextView
- Clean Code
- uiscrollview
- Protocol
- Human interface guide
- 리팩토링
- Observable
- clean architecture
- collectionview
- Refactoring
- combine
- Today
- Total
목록swiftUI (181)
김종권의 iOS 앱 개발 알아가기
목차) Combine - 목차 링크 Combine async 작업들을 이벤트 처리 연산자로 결합하여 처리하는 방법 선언적인 프로그래밍 형태로 사용 Stream하나를 만들고 그 Stream에 필요한 operator를 덫붙여서 사용하는 선언적인 프로그래밍 방식 // 선언형 프로그래밍인 Combine 예제 코드 $username .debounce(for: 0.1, scheduler: RunLoop.main) .removeDuplicates() .map { $0.count >= 2 } .assign(to: \.valid, on: self) .store(in: &cancellableSet) 선언적인 프로그래밍이 되면서, 클로저를 이용한 콜백지옥에서 벗어날 수 있는 장점이 존재 Combine을 사용하면 이벤트 처리..
Combine 기본 개념 Combine이란? Combine 훓어보기 - RxSwift와의 차이점 ObservableObject @Published, objectWillChange Cancellable (AnyCancellable) Publisher (AnyPublisher, Published) Publisher 생성 연산자 (Just, Sequence, Future, Fail, Empty, Deferred, Record) Subscriber (AnySubscriber) Subject (CurrentValueSubject, PassthroughSubject) Scheduler (receive(on:), subscribe(on:), delay(for:scheduler:)) Combine 연산자 Operato..
목차) SwiftUI의 기본 - 목차 링크EmptyView이름 그대로 아무것도 가지고 있지 않은 뷰EmptyView()에 frame, foregroundColor 옵션을 주어도 아무런 표시가 남지 않음struct ContentView: View { var body: some View { VStack { Text("Text1") EmptyView() .frame(height: 20) .foregroundColor(.blue) Text("Text2") Spacer() .frame(height: 20) Text("Text3") } }}EmptyView의 사용처아무런 뷰를 사용하고 싶지 않을때 선언Toggle에 la..
목차) SwiftUI의 기본 - 목차 링크 Alert iOS 13~iOS 15까지는 위 Alert를 사용했지만, deprecated iOS 15부터는 .alert 사용을 권장 .alert는 더욱 선언적으로 alert를 사용할 수 있는 방법 위 Alert를 하나의 View로 존재했지만, iOS15부터는 메소드로 사용이 가능 (더욱 선언적 프로그래밍) 사용 방법은 Button에 .alert하여 추가 alert가 보이는 상태 변수도 하나 추가 .alert 메소드에는 titleKey, isPresented, View 순서대로 주입하여 사용 @State var isShowing = false var body: some View { Button("Alert") { isShowing = true } .alert("t..
목차) SwiftUI의 기본 - 목차 링크 TabView SwiftUI에서는 Tab을 매우 직관적으로 추가하기가 가능 TabView를 선언해 놓고, 가 하위에 .tabItem을 추가하여 사용 TabView에 넣을 뷰 3가지 준비 struct ViewA: View { var body: some View { Text("ViewA") } } struct ViewB: View { var body: some View { Text("ViewB") } } struct ViewC: View { var body: some View { Text("ViewC") } } TabView하위에 위 뷰들을 추가하고, 탭뷰의 이름은 .tabItem으로 추가 struct ContentView: View { var body: some ..
목차) SwiftUI의 기본 - 목차 링크 Spacer Stack안에서 사용되며, Stack의 크기만큼 내부 크기의 공백이 채우고 싶을때 사용 List와 row가 있을 때 row는 원래 좌측 정렬되어있지만, Spacer()를 추가하면 오른쪽 정렬로 변경 Spacer없는 경우 Spacer 추가한 경우 코드 struct ChecklistRow: View { let name: String var body: some View { HStack { Spacer() //
목차) SwiftUI의 기본 - 목차 링크 Group Group은 여러개의 View 들에 동일한 속성을 부여하고 싶을때 사용 ex) 3개의 Text에 동일한 .font를 적용하고 싶은 경우, 3개의 Text를 Group안에 넣어서 관리 struct ContentView: View { var body: some View { Group { Text("SwiftUI") Text("Combine") Text("Swift System") } .font(.headline) Text("Some Text") } } GroupBox GroupBox는 view 연관있는 내용들을 하나로 묶은 UI GroupBox { Text("Content") } GroupBox("title") { Text("Content") } Grou..
목차) SwiftUI의 기본 - 목차 링크 Axis enum 타입 형태 단순히 horizontal, vertical이라는 case가 있는 형태 @frozen public enum Axis : Int8, CaseIterable { case horizontal case vertical @frozen public struct Set : OptionSet { public typealias Element = Axis.Set public let rawValue: Int8 public init(rawValue: Int8) public static let horizontal: Axis.Set public static let vertical: Axis.Set public typealias ArrayLiteralEleme..