본문 바로가기

Programming/Swift

(21)
Swift struct 배열에서 내부 값 수정하기 우리가 모르고 쓰는 writeback 최적화Swift에서 struct는 값 타입이라, 배열에 담긴 struct를 수정하려면 "복사 → 수정 → 재할당"이 기본입니다.하지만 가끔 이렇게 코드를 짰는데도… 잘 됩니다?users[index].profile.updateNickname("newName")분명 struct인데도 내부 값을 이렇게 바꿨는데 잘 된다?어떻게 가능한 걸까요?struct User { var id: Int var profile: Profile}struct Profile { var nickname: String mutating func updateNickname(_ newNickname: String) { nickname = newNickname }}그리..
Swift OptionSet으로 깔끔한 옵션 관리하기 OptionSet이란?OptionSet은 Swift에서 비트마스크(Bitmask) 를 쉽게 다룰 수 있도록 도와주는 프로토콜입니다.여러 개의 옵션을 조합하여 사용할 때 유용하며, Set처럼 동작하지만 내부적으로는 비트 연산을 활용하여 최적화됩니다.예를 들어, 파일 권한(읽기, 쓰기, 실행)을 다룰 때 OptionSet을 사용하면 코드가 더 깔끔하고 효율적으로 작성됩니다.OptionSet 사용 예제아래는 파일 접근 권한을 OptionSet으로 정의한 예제입니다.struct FilePermissions: OptionSet { let rawValue: Int static let read = FilePermissions(rawValue: 1 OptionSet을 사용하면 좋은 경우여러 개의 옵션을..
Actor가 처음이라고요? Swift의 Actor는 5.5 버전에 소개됐는데요그럼에도 불구하고 아직은 낯선게 사실입니다.Swift6가 돼서야 본격적으로 사용가능하도록 지원하고 있는데요Actor를 처음 접하시는 분들에 대한 두개의 블로그를 소개합니다.https://www.avanderlee.com/swift/actors/https://www.avanderlee.com/swift/mainactor-dispatch-main-thread/
swift 주석 관련 공식 문서 (Swift Markup Formatting Reference) https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_markup_formatting_ref/index.html#//apple_ref/doc/uid/TP40016497-CH2-SW1
MVVM+Router https://github.com/alinradut/MVVMR GitHub - alinradut/MVVMR: MVVM + Router implementation for Swift. MVVM + Router implementation for Swift. Contribute to alinradut/MVVMR development by creating an account on GitHub. github.com
[SwiftUI] 애플에서 제공하는 LazyVGrid 구현 예제 SwiftUI는 애플에서 샘플까지 제공해주고 있어서, 구현하는데 많은 도움이 되곤 합니다. 최근에 GridView를 통한 UI 구현할일이 있어 가이드 문서 살펴보니, 역시나 애플에서 친절하게 방법을 제공해 주고 있었습니다. 예제에서 소개한 방법은 이모지를 유니코드와 이모지 아이콘을 표시하는 방법을 LazyVGrid를 통해 설명한 문서입니다. https://developer.apple.com/documentation/swiftui/lazyvgrid LazyVGrid | Apple Developer Documentation A container view that arranges its child views in a grid that grows vertically, creating items only as n..
[Swift] 취소 가능한 Task를 설정하는 방법 (feat. AnyCancelTaskBag) Task를 여러개 등록한 Class가 있다고 가정할때, 이들의 작업이 모두 완료 되기 전에 Class를 닫아야할 경우가 생깁니다. 이때 진행중인 작업을 즉시 완료 하고, 메모리에서 해제하고 싶을 때가 있는데요 Combine은 .store를 통해 여러개의 subject를 등록하고 Class해제 시점에 같이 해제 시켜줄 수 있는데요 class AnyClass { private var subject = PassthroughSubject() private var cancellables: [AnyCancellable] = [] init() { subject .sink { [weak self] text in guard let self = self else { return } }.store(in: &self.canc..
[SwiftUI] @StateObject 또는 @ObservedObject 차이점 SwiftUI에서 MVVM형태의 코드를 작성하려고 할때 아래와 같은 방식으로 대부분 사용할텐데요 class TestViewModel: ObservableObject { @Published var name: String? } struct TestView: View { @ObservedObject var viewModel = TestViewModel() var body: some View { Text(viewModel.name) } } ViewModel의 Property Wrapper에는 아래와 같이 @StateObject 또는 @ObservedObject를 지정할 수 있습니다. @StateObject var viewModel = TestViewModel() @ObservedObject var viewMod..

반응형