일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SwiftData
- Network
- dataflow
- 최적화
- ios
- auth
- Algorithm
- CS
- swift
- UIKit
- arkit
- firebase
- combine
- date
- SwiftUI
- gesture
- GCD
- withAnimation
- async
- Concurrency
- stateobject
- authentication
- WWDC
- state
- view
- 달력
- 알고리즘
- Animation
- iphone
- RxSwift
- Today
- Total
목록ios (37)
XLOG
최근 디버그 과정 중 continuation 쪽 문제를 해결하면서 내용을 한번 정리해두는게 좋다는 생각이 들어서 시작한 글입니다.swift의 async/await는 복잡한 비동기 코드를 깔끔하게 정리해주는 강력한 기능입니다. 그런데 기존의 콜백 기반 API를 어떻게 async 함수로 바꿀 수 있을까요? 그 때 등장하는 개념이 바로 continuation입니다.이 글에서는 continuation이란 무엇인지, 그리고 Swift에서 제공하는 관련 API들을 쉽게 설명해보겠습니다.🧠 continuation이란?간단히 말해, 중단된 함수의 흐름을 다시 이어줄 수 있는 객체입니다. Swift의 async 함수는 실행을 잠시 멈췄다가 다시 이어서 실행할 수 있어야 하는데, 그 주체가 continuation입니다...
1. 문제public enum TransactionType: String, Codable, CaseIterable, Sendable { case income = "income" case fixedExpense = "fixedExpense" case variableExpense = "variableExpense"}@Modelfinal class Category { @Attribute(.unique) var id: UUID var name: String var orderIndex: Int var transactionType: TransactionType var isActive: Bool @Relationship(deleteRule: .cascade, inver..
한번씩 하려다보면 항상 검색을 해야해서 정리해보았다...1. Date - 기본 날짜/시간 타입Date는 Swift의 핵심 날짜/시간 타입으로, Unix 타임스탬프(1970년 1월 1일 00:00:00 UTC부터의 초)를 기반으로 한다.// 현재 시간let now = Date()// 특정 시간 생성let specificDate = Date(timeIntervalSince1970: 1640995200) // 2022-01-01 00:00:00 UTC// 상대적 시간 생성let oneHourAgo = Date(timeIntervalSinceNow: -3600)let tomorrow = Date(timeIntervalSinceNow: 86400)2. TimeInterval - 시간 간격TimeInterval은 ..

Accessibility 를 공부하다가 보니 흔하게 사용하는 TextField 에서 음성입력 버튼이 없다는 걸 깨달았다. searchable 로 navigation bar 에 search controller 를 추가하더라도 없었다. 물론 키보드가 올라오면 음성입력할 수 있는 버튼이 있지만, 가장 최하단에 있어서 접근하는 것이 여간 불편한 일이라는 걸 깨달았다.해당 코드는에서는 AVAudioEngine 을 사용할 계획이다. 1. 권한 설정info.plist 에 마이크 사용 및 음성 인식 사용 권한 요청을 추가해 준다.2. STTManager 정의2-1 권한 요청 (Combine 으로 진행)import Foundationimport AVFoundationimport Speechfinal class STTMa..

2022년 애플아카데미에 있을 때 Accessibility 관련 주제에 대해 얘기를 들은 적이 있었다.옛 직장에서 홍보관 리뉴얼을 진행할 때 휠체어를 탄 사람들이 관람하기 어려운 곳이란 판단에 그 부분에 대한 업데이트를 요청한 적이 있었다. 국내 성인이면 누구나 알만한 대기업이 었지만 금액, 효율 등의 이유로 바로 반려당한 적이 있던 나였다.하지만 Apple 은 아카데미를 오픈할 당시 자동문의 사이즈가 휠체어 사용자를 위한 사이즈를 충족하지 못하였기에 오픈을 연기했었다. 그런 기억이 있기에 Accessibility 에 관한 내용을 처음 접했을 때 어떤 유저든 사용편의성을 주기 위한 노력을 하는 기업이구나란 생각을 했고, 나도 앱을 개발하게 되면 그런 노력을 해야겠다고 생각을 했는데....여태 잊고 있다 ..

이전 회사에서 혼자 AR 을 담당해서 개발을 했었는데, 바쁘다는 핑계로 제대로 정리를 한적이 없었다....그래서 시작하게 된 AR Posting1. ARKit, RealityKit 은 무엇일까?ARKitAR을 사용하려면 ARKit 을 쓰면된다고 생각하지만 100% 맞다고 할 순 없다. 실제 우리가 App 을 만들때 UI 가 있어야 하지만, ARKit 은 우리가 사용할 수 있는 UI 요소가 존재하지 않는다. ARKit 은 AR 환경을 구축하기 위해 내가 가지고 있는 하드웨어(iPhone, iPad)에 장착되어 있는 센서들을 통해 데이터를 받아와 AR 환경을 만드는데 도움을 주는 프레임워크이다.RealityKitRealityKit 공식 문서 페이지에서 말해주듯이 3D 시뮬레이션 및 렌더링 기능을 제공하는 프..

1. Observation 이란?wwdc 23 에서 발표한 observation 은 프로퍼티의 변화를 추적하는 Swift 기능으로 같은 wwdc 23 에 발표한 swift 5.9에 신기능인 매크로를 사용하여 정의한 데이터 타입을 observable 하게 바꿔주는 기능이다.2. 사용방법정의한 class 에 @observable property wrapper 를 붙여준다.import Foundationimport Observation@Observable class DataModel { var count: Int = 0}이를 View 에서 사용할 땐 @State, @Environment, @Bindable, var 를 사할 수 있다. 여기서의 기준은View의 부분일 경우 @State, 글로벌하게 변수를 사용할..

사이드 프로젝트를 진행하면서 Tree 형태의 데이터 구조를 만들어 사용했다.데이터는 SwiftData 를 사용해서 저장을 했으며 Model 은 Hashable 을 상속시켰다.그런데 데이터를 수정하고 나서 한번씩 Fatal error 가 발생했다.테스트를 더 해보긴 해야겠지만 찾아본 바로 원인은 Hashable을 충족하기 위해서 Equatable 또한 상속시켜야 한다. Hashable 이 Equatable 을 상속해야하는 이유는 HashValue 의 비교를 위해서인데, 여기서 내가 실수한 부분은 == 에 정의할 때 비교 연산을 Hash 함수에 사용한 Propertie 와 달라서 였다.예를 들면class Model { let id: UUID = UUID() let name: String let s..

1. StateSingle source of truth 로 View 에서 PropertyWrapper 로 정의 한다. 그로 인해 View 와 따로 독립적으로 SwiftUI 가 데이터를 관리해 주며 생명 주기는 View 의 생명주기와 동일하다. State 값의 변화를 view에 알려주면 View 는 re-render 한다.단 해당 State 가 정의된 View 의 body 내부에 직접적으로 state 값을 활용하여 View 의 내용이 달라지는 요소가 없다면 re-render 하지 않는다.import SwiftUIstruct ParentView: View { @State var count: Int = 0 var body: some View { VStack { ..
친한 개발자와 얘기를 하다가 밀리의 서재에서 책을 클릭했을 때 나오는 Animation 얘기가 나와서 어떻게 구현했을까 고민을 하다가 SwiftUI 로 구현해봐야 겠다 생각해서 시작한 일이다. 1. 문제점기존에 Namespace 를 사용할 경우 기존 view 가 없어져야함, 하지만 위에 화면을 보게되면 기존 ScrollView는 항상 있어야 함Scroll 에 따라서 해당 View 가 가지고 있는 크기 및 위치값인 CGRect 를 Update 를 해주기 위해선 PreferenceKey 를 사용해야 하는데 PreferenceKey 의 경우 하위 View 에서 상위 View의 값을 전달할 때 사용하는 것인데, FullScreenCover 는 CellView 의 상위뷰가 아님present 할 때와 dismiss..