일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트
- 딥러닝
- 책
- Algorithm
- 머신러닝
- objc
- 스위프트UI
- 애니메이션
- leetcode
- RX
- 문자열
- SWIFT
- Deep learning
- ReactiveX
- ARC
- string
- swiftUI
- objective-c
- iOS SwiftUI
- 알고리즘
- ios
- stanford SwiftUI
- 책 후기
- wwdc
- Xcode
- 책 추천
- Animation
- rxswift
- 독서
- swift5
- Today
- Total
목록ios (117)
THIS IS ELLIE
모델 모델 MemoryGame은 에 들어오는 타입이 무엇인지 상관하지 않는다. (제네릭 사용) MemoryGame을 init 하면서 CardContent가 무엇인지 신경 쓰는 쪽이 모델을 위해 만들어준다. 아래 mutating func choose(card: Card)함수를 살펴보자. mutating func choose(card: Card) { print("card가 선택되었다 \(card)") let chosenIndex: Int = index(of: card) cards[chosenIndex].isFaceUp = !cards[chosenIndex].isFaceUp } 여기서 파라미터로 넘어오는 card는 let이기 때문에 상수이다. 우리는 in-place하게 array에 있는 카드의 속성을 변경하기..
MVVM은 디자인 패러다임이다. MVVM 없이는 SwiftUI를 사용할 수 없다. 모델 앱의 백앤드 역할 그리고 UI와 View에 독립적이다. 그렇기 때문에 아래와 같이 SwiftUI패키지를 추가하지 않는다. import SwiftUI 데이터와 로직을 가진다. 예를 들어 카드 매칭 게임이 있으면 카드는 데이터가 되고 매칭 하는 부분은 로직이 된다. 뷰 모델을 반영한다. 상태를 가지지 않고 가질 필요가 없다. 리액티브 하기 때문에 모델이 변경될 때 뷰가 자동적으로 변경된다. 뷰모델 뷰를 모델에 바인드 한다. (바인딩) 번역가와 같다. // 모델에서 뷰로 만약에 모델 구조체에 변경이 있다면 뷰모델한테 변경이 있음을 알려준다. 뷰는 뷰모델을 관찰하고 있다가 자동적으로 뷰를 그린다. (즉 뷰모델은 뷰에 대한 포..
프로젝트를 처음 생성하고 ContentView의 모습이다. 아래 코드는 코드를 작성하는 부분과 화면이 프리뷰 윈도우가 나타나는 오른쪽을 연결해주는 역할을 한다. struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } 개발을 하다보면 오른쪽 프리뷰 윈도우에 실시간적으로 반영이 안 될 때도 있지만, 그럴 때마다 우측 상단에 있는 resume버튼을 눌러주자. 그러면 프리뷰 윈도우에 노출될 것이다. import SwiftUI 위 줄은 SwiftUI 패키지를 포함한다는 뜻이다. UI작업이 포함되지 않는다면 Foundation 프레임워크를 포함해라. (마젠타 색으로 표시된 것은 키워드를 나타낸다...
스위프트 파일을 생성하면 기본적으로 임포트 되는 프레임워크가 있는데 바로 Foundation입니다.이는 필수적인 데이터 타입과 컬렉션 및 운영체제 서비스에 접근해 애플리케이션의 기본적인 기능을 정의하고 관리하는 프레임워크입니다. developer.apple.com/documentation/foundation 이러다가 사용자 인터페이스를 구현하고 이벤트를 관리하려면 UIKit를 임포트 시켜야 합니다. developer.apple.com/documentation/uikit 하지만 UIKit내부에는 Foundation프레임워크가 포함되어있습니다. 그렇기 때문에 Foundation 임포트 시키는 줄을 없애도 무방합니다. UIKit는 Foundation을 포함한 많은 다른 프레임워크를 가져오는 umbrella프레..
스위프트에서 클래스는 레퍼런스 타입이고 구조체와 열거형은 값 타입입니다. 값 타입의 속성은 기본적으로 인스턴스 메서드 내에서 수정할 수 없습니다. 값 타입의 속성을 수정하려면 인스턴스 메서드에서 mutating 키워드를 사용해야 합니다. mutating을 붙이면 self 프로퍼티에 새로운 인스턴스를 할당할 수 있습니다. struct Point { var x = 0.0, y = 0.0 mutating func moveBy(x deltaX: Double, y deltaY: Double) { self = Point(x: x + deltaX, y: y + deltaY) } } mutating moveBy(x:y:)메소드는 x, y값이 타겟 위치로 설정된 새 구조체를 만듭니다. 또 다른 예제 enum TriSta..
어떤 분이 초기화되지 않은 버퍼에 액세스 할 수 있는 배열 초기화 프로그램을 만든 포스트를 보다가 작성하게 되었어요. forums.swift.org/t/array-initializer-with-access-to-uninitialized-buffer/13689 스위프트에서 배열 크기 늘리기 // Grwoing the size an array 스위프트에서 배열은 내용을 보관하기 위해 특정 사이즈만큼의 메모리를 예약해둡니다. 배열에 element를 추가하고 해당 배열이 예약된 용량을 초과하기 시작하면, 배열은 더 큰 메모리 영역을 할당하고 해당 element를 새 저장 공간에 복사합니다. 이때 새 저장소의 크기는 이전 저장소 크기의 배수입니다. 이렇게 배수로 증가시키는 것은 상수 시간으로 element가 추가..
이전에 살펴봤던 @State에 이어서 @Binding, @ObservedObject and @EnvironmentObject를 살펴보겠습니다. @State 뷰가 소유하고 있는 변수입니다. @State 변수는 영구 저장소를 할당하게 됩니다. 애플은 @State변수가 특정 뷰에게 관리되고 소유되도록 private 하게 선언하도록 합니다. 2020/11/02 - [개발/SwiftUI] - SwiftUI @State살펴보기 @Binding 데이터를 저장하는 프로퍼티와 데이터를 표시하고 변경하는 뷰 사이에 연결을 @Binding을 사용해 만들 수 있습니다. (즉 다른 뷰에서 @State 변수를 바인딩할 수 있습니다.) @Binding은 데이터의 참조값을 가지고 있기 때문에 @State와 다르게 초기화해주지 않아도..
값이 변하면 UI가 업데이트되어야 한다고 가정해봅시다. 그때 SwiftUI에서는 @State를 사용할 수 있습니다. SwiftUI는 State로 선언된 프로퍼티의 저장 공간을 관리합니다. SwiftUI에서 @State변수가 변경되면 뷰는 appearance를 무효화하고 body를 재계산합니다. 주어진 뷰에 대한 단일 소스로 사용합니다. State 인스턴스는 값 그 자체라는 것이 아니라 값의 읽기와 쓰는 수단입니다. 뷰의 본문 내부 또는 호출된 메서드에서만 프로퍼티에 접근해야 합니다. 뷰 클라이언트가 접근하지 못하도록 프로퍼티를 private으로 선언합니다. 어떤 스레드에서도 프로퍼티 상태를 변경하는 것은 안전합니다. 다른 뷰에 프로퍼티 상태를 전달하기 위해서 $와 변수 이름을 함께 사용해 프로퍼티 속성을..