| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Human interface guide
- rxswift
- clean architecture
- UITextView
- SWIFT
- ios
- 클로드코드
- swiftUI
- RxCocoa
- Clean Code
- uitableview
- UICollectionView
- Xcode
- swift documentation
- uiscrollview
- 애니메이션
- 클린 코드
- 리팩토링
- 스위프트
- 리펙토링
- Protocol
- Refactoring
- tableView
- MVVM
- map
- combine
- collectionview
- HIG
- claude code
- Observable
- Today
- Total
목록SWIFT (983)
김종권의 iOS 앱 개발 알아가기
백그라운드 작업이란?사용자가 앱을 나가고도 프로세스가 살아 있으면 앱은 백그라운드로 전환됨앱은 일시중단되며,"Suspended" CPU를 사용하지 않게됨배터리를 보호하고 개인 정보를 지키는 역할포그라운드 앱에 리소스를 확보해 줌(앱은 일시중단 전 작업을 마무리할 수 있도록 백그라운드 실행 시간을 요청할 수 있음)위처럼 백그라운드 상태를 잘 사용하려면 시스템이 리소스를 어떻게 우선순위화하고 관리하는지, 앱 안에서 무엇을 할 수 있는지 이해하는것이 좋음백그라운드를 이해하는 핵심애플이 백그라운드 상태를 만드는 목적의 핵심은 `배터리 수명`을 보호하고 `성능을 최적화`하여 부드럽고 반응성 있는 사용 경험을 유지하는 것때문에 백그라운드 실행은 보장되지 않음기회가 있을 때만 허용되고 대부분은 재량에 따라 엄격히 관..
Animation 매크로원래는 아래와같은 애니메이션을 구현할땐 애니메이션을 커스텀해야햐하므로 AnimatableData를 사용하여 커스텀해야함코드) 여기서 중요한 점은 드로잉 방향이 내장된 애니메이션에 의해 원하지 않는 방향으로 드로잉 되는데 이것을 제거해주는 코드를 구현하려면 아래처럼 많은 코드가 필요SwiftUI에서는 @Animatable 매크로와 @AnimatableIgnores를 통해 내장된 애니메이션 기능 비화성화도 가능예를 들어, 드로잉 방향이 원하지 않는 방향으로 될때 @AnimatableIgnores를 사용하여 제거WebView와 WebPageWebPage라는 Observable 모델이 생겼고 이 instance를 WebView에 넣어서 사용page instance에서 load하여 url을..
배열 향상 - InlineArray새로운 API (Swift 6.2+)InlineArray속도가 더 빠름기존 Array처럼 유연성은 줄어들지만, 그 대신 속도와 메모리 효율이 훨씬 뛰어남기존 Array의 단점을 보완해줌동적 크기 조정을 위해 데이터를 힙(heap)에 저장하는데, 크기를 넘어서면 새로운 메모리를 할당하고 복사하는 오버헤드가 발생하고 성능에 민감한 코드를 작성할 때 비효율적임만약 더 많은 요소가 저장되는경우 메모리에서 동작하는 과정?Heap에 새로운 메모리를 할당하고 기존 요소들을 복사과정이 필요 InlineArray의 경우 heap에 별도로 저장하지 않고 Stack에 저장함사용 방법Array같이 사용하며 아래에 요소의 갯수와 타입은 생략 가능 (컴파일가 알아서 추가해줌)Array vs In..
Subprocess말 그대로 프로세스들을 관리해주는 모듈import Subprocess를 하고난 후 아래처럼 사용이 가능Foundation 개선NotificationCenter 알림 등록 시 보일러플레이트 제거기존엔 UIResponder 이벤트 등록 시 아래처럼 작성addObserver할 땐 forName: UIResponder.keyboardWillShowNotification으로 작성startFrame, endFrame을 구할때도 긴 코드가 필요변경된 것보일러 플레이트가 많이 줄어들음개선1: addObserver(forName:object:queue:) -> addObserver(of:for:)개선2: userInfo[UIResponder.keyboardFrameBeginUserInfoKey] as?..
새로운 `swiftly 버전 관리자`Linux상 Swift 도구 체인 관리를 관소화하기 위해 오픈 소스 커뮤니티에서 개발한 것 Swiftly는 macOS를 지원하며 swift.org에서 1.0 릴리즈 사용이 가능Swiftly 가이드 문서: https://www.swift.org/blog/introducing-swiftly_10/// 툴체인 설치swiftly install 6.1.3// 스냅샷 제공swiftly install main-snapshotXcode에서도 Toolchains 메뉴에서도 툴체인 사용 가능새로운 Swift lint설정 기능Swift Package Manager (SPM) 의 Package.swift 파일에서 아래처럼 swift lint 기능 사용이 가능treatAllWanings(as..
제네릭과 프로토콜제네릭컴파일 타임에 타입이 정의되므로 타입 안정성이 있고 성능이 높음(static dispatch)DI(Dependency Injection)에 취약함struct UserService { var items: [T] func firstItem() -> T? { return items.first }}프로토콜DI(Dependency Injection)에 유리함 (관련 글)dynamic dispatch이므로 성능이 안좋음struct UserService { var items: [UserRepresentable] func firstItem() -> UserRepresentable? { items.first }}static dispatch, ..
중첩 case 커피를 구분하는 switch-case문이 있을때, associated value에 다른 타입이 있는 경우enum BeverageType { case coffee(coffeeType: CoffeeType)}enum CoffeeType { case latte}enum OrderInfo { case specialOrder(customerName: String, drink: BeverageType)}let order1: OrderInfo = .specialOrder(customerName: "jake", drink: .coffee(coffeeType: .latte))이것을 사용하는 주문 쪽에서는 타입이 여러개이므로 switch-case에서 아래처럼 여러 단계를 가져갈 수 있음Ord..
밀집된 코드와 분리된 코드코드 관점에서 밀집된 코드와 분리된 코드가 있는데 가끔 어떤 방식으로 코드를 구현해야하는지 고민이 될 때가 있음 cf) 응집도와 결합도: 흔히 알려진 개념인 응집도와 결합도는 모듈을 기준으로 한 모듈이 다른 모듈을 많이 의존한다면 결합도가 크고 응집도가 낮다고 함모듈 관점에서는 코드를 작성할때 모듈간에 최대한 모르게끔 하는 명확한 방법이 존재하지만, 모듈 내부에서 코드를 작성해나갈때 최대한 함수로 작성할지, 아니면 함수 없이 한곳에 작성할지 고민이 되는 경우가 있음ex) VC가 로드될때 로딩을 돌리고, 카페 이름을 가져와서 뷰에 반영한 후 로딩을 멈추는 코드1. 하나의 함수에 모든 과업 다 넣기func viewDidLoad() { super.viewDidLoad() loa..