모델 모델 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 데이터와 로직을 가진다. 예를 들어 카드 매칭 게임이 있으면 카드는 데이터가 되고 매칭 하는 부분은 로직이 된다. 뷰 모델을 반영한다. 상태를 가지지 않고 가질 필요가 없다. 리액티브 하기 때문에 모델이 변경될 때 뷰가 자동적으로 변경된다. 뷰모델 뷰를 모델에 바인드 한다. (바인딩) 번역가와 같다. // 모델에서 뷰로 만약에 모델 구조체에 변경이 있다면 뷰모델한테 변경이 있음을 알려준다. 뷰는 뷰모델을 관찰하고 있다가 자동적으로 뷰를 그린다. (즉 뷰모델은 뷰에 대한 포..
스위프트 파일을 생성하면 기본적으로 임포트 되는 프레임워크가 있는데 바로 Foundation입니다.이는 필수적인 데이터 타입과 컬렉션 및 운영체제 서비스에 접근해 애플리케이션의 기본적인 기능을 정의하고 관리하는 프레임워크입니다. developer.apple.com/documentation/foundation 이러다가 사용자 인터페이스를 구현하고 이벤트를 관리하려면 UIKit를 임포트 시켜야 합니다. developer.apple.com/documentation/uikit 하지만 UIKit내부에는 Foundation프레임워크가 포함되어있습니다. 그렇기 때문에 Foundation 임포트 시키는 줄을 없애도 무방합니다. UIKit는 Foundation을 포함한 많은 다른 프레임워크를 가져오는 umbrella프레..
팰린드롬 알고리즘에 대해서 작성해보려 합니다. 팰린드롬 알고리즘은 면접에서 물어보는 알고리즘으로 유명하기도 합니다. 팰린드롬 알고리즘에 대해서 살펴보기 전 팰린드롬의 정의를 찾아보면 팰린드롬은 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말, 숫자, 문자열입니다. (A palindrome is a word, phrase, number or sequence of words that reads the same backward as forward.) 팰린드롬의 예로는 기러기, 요기요 등이 있습니다. 그럼 주어진 문자열이 팰린드롬인지 아닌지는 어떻게 확인할 수 있을까요. 그냥 뒤집어보면 압니다. func isPanlindrome(_ s: String) -> Bool { if s == String(s.reve..
스위프트에서 클래스는 레퍼런스 타입이고 구조체와 열거형은 값 타입입니다. 값 타입의 속성은 기본적으로 인스턴스 메서드 내에서 수정할 수 없습니다. 값 타입의 속성을 수정하려면 인스턴스 메서드에서 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..
AVPlayerViewController 클래스 시스템을 지원하는 재생 컨트롤 플레이어 오브젝트의 비디오 콘텐츠를 표시하는 뷰 컨트롤러입니다. // AVPlayerViewController는 iOS 8.0 이상부터 사용 가능합니다. AVPlayerViewController를 사용하면 네이티브 시스템 플레이어와 스타일이 매칭 되는 앱에 미디어 재생 기능을 간단하게 추가할 수 있습니다. AVPlayerViewController는 시스템 프레임워크 클래스이기 때문에 앱에서는 따로 추가해줄 작업할 것 없도록 자동으로 기능을 채택하고 업데이트합니다. (AVPlayerViewController를 서브 클래싱 하거나 메서드를 재정의 하는 것은 지원되지 않습니다.) AirPlay 지원 AirPlay를 사용하면 유저가 ..
값이 변하면 UI가 업데이트되어야 한다고 가정해봅시다. 그때 SwiftUI에서는 @State를 사용할 수 있습니다. SwiftUI는 State로 선언된 프로퍼티의 저장 공간을 관리합니다. SwiftUI에서 @State변수가 변경되면 뷰는 appearance를 무효화하고 body를 재계산합니다. 주어진 뷰에 대한 단일 소스로 사용합니다. State 인스턴스는 값 그 자체라는 것이 아니라 값의 읽기와 쓰는 수단입니다. 뷰의 본문 내부 또는 호출된 메서드에서만 프로퍼티에 접근해야 합니다. 뷰 클라이언트가 접근하지 못하도록 프로퍼티를 private으로 선언합니다. 어떤 스레드에서도 프로퍼티 상태를 변경하는 것은 안전합니다. 다른 뷰에 프로퍼티 상태를 전달하기 위해서 $와 변수 이름을 함께 사용해 프로퍼티 속성을..
2020/10/12 - [개발/iOS] - AVPlayer클래스 살펴보기 2020/10/12 - [개발/iOS] - AVPlayer에서 플레이어 상태 파악하기 AVPlayer는 미디어 재생과 타임을 관리할 수 있는 컨트롤러이다. 이번에 AVPlayer를 사용해 개발하다가 하루 종일 끙끙거린 문제가 있었다. 먼저 AVAsset으로 모델링한 것으로 AVPlayerItem을 만들어 플레이어에 넣어주었다. 그리고 플레이어를 재생시키면 잘 재생되는 것 까지 확인 완료. 문제는 여기다. 잘 재생되다가 오디오 인터럽트가 지속될시에 현재 재생하고 있는 미디어가 노출되지 않는 현상이 발생했다. (카메라 앱에서 동영상을 오래동안 찍고 있거나 슬립 상태에 진입) 애플에서 자체적으로 비디오 렌더링을 못하게 막는 것 같았음. ..
- Total
- Today
- Yesterday
- ios
- Xcode
- wwdc
- objective-c
- 머신러닝
- swift5
- iOS SwiftUI
- string
- 독서
- ReactiveX
- 애니메이션
- stanford SwiftUI
- Deep learning
- Algorithm
- objc
- swiftUI
- 스위프트
- 스위프트UI
- 알고리즘
- RX
- 책 후기
- ARC
- 책
- Animation
- 책 추천
- 문자열
- rxswift
- SWIFT
- leetcode
- 딥러닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |