본문 바로가기

iOS/Swift9

[Swift][SwiftUI] PropertyWrapper의 개념 및 @State, @Binding propertyWrapper의 개념 Swift 5.1 부터 사용할 수 있는 기능 한번 원하는 기능 또는 연산을 하여(wrapped) 하여 보여줄 수 있도록 한다. Class, Struct, Enum 에서 @propertyWrapper 를 붙여 사용한다. propertyWrapper 를 정의하기 위해서는 wrappedValue 라는 프로퍼티를 정의해야 한다. Swift Docs의 예제: 12 이하의 값을 얻어오는 연산을 줄이기 위해 만들 수 있는 TwelveOrLess 라는 propertyWrapper 만드는 예시 @propertyWrapper struct TwelveOrLess { private var number = 0 var wrappedValue: Int { get { return number } .. 2022. 11. 12.
[Swift] @available(*, unavailable) 사용하기 10 little UIKit tips you should know 라는 글을 읽다가 @available(*, unavailable) 를 사용하는 코드를 여럿 보게 되었습니다. 왜 이걸 썼지? 했었는데 글 쓰신 분이 다음과 같이 남기셨습니다. 개인적인 선호라.. 그렇담 쓰면 어떻게 좋다는지 좀 더 자세히 보고자 글을 쓰게 되었습니다. Swift의 @available attribute의 특징 Swift에서 @ 표시를 사용해 1. declaration을 하거나 2. 타입에다가 특성을 부여해 추가적인 정보를 제공하는 attribute를 사용할 수 있습니다. 개발하면서 보게 되는 @availble, @discardableResult, @escaping 등이 이에 해당합니다. 이 중에 @available 은 특정 .. 2022. 2. 21.
[Swift] weak/unowned self는 언제 사용해야 할까? ARC에서 발생할 수 있는 Strong Reference Cycle로 인한 메모리 누수를 방지하기 위해 weak self 또는unowned self 를 사용하게 됩니다. 주로 클로저에서 weak self를 사용하고는 하는데 모든 클로저에 weak self를 사용해야 하는지, 그렇지 않다면 어떤 부분에 weak self를 사용해야 하는지 알아보고자 찾아본 내용을 정리하고자 글을 쓰게 되었습니다. Escaping, non escaping closure 여부 일반적으로 @escaping 키워드가 붙지 않은 클로저의 경우, 클로저의 scope 내에서 즉시 실행됩니다. 따라서 weak이나 unowned 를 사용할 필요가 없다고 하네요. 그러나 escaping closure의 경우 weak이나 unowned를 사용.. 2022. 2. 14.
[Swift] DispatchQueue의 qos 사용하기 GCD에서 global큐나 커스텀 큐를 사용할 때 qos(quality of service)를 사용해 작업의 중요도를 결정할 수 있습니다. 그렇기 때문에 작업의 우선순위를 결정하기 위해서는 qos의 우선순위가 어떻게 되는지 알고 어떤 때 사용하는지 구체적으로 생각해두고자 이번 글에서 이것저것 보면서 정리해두고자 합니다. 1. qos는 왜 사용하는가? 애플의 문서 Prioritize Work with Quality of Service Classes에 보면 qos를 왜 사용해야 하는지 잘 나와 있습니다. 빠르게 처리해야 하는 작업은 더 느리게 처리해도 되는 낮은 우선순위의 작업보다도 자원과 에너지를 더 많이 사용하게 됩니다. 따라서 한정된 자원과 에너지를 효율적으로 사용하기 위해서는 빠른 수행이 필요한 작업.. 2021. 11. 15.
[Swift] lazy 프로퍼티 알아보기 이번 글에서는 Swift의 lazy 프로퍼티에 대해 알아보겠습니다. lazy property란 무엇인가? lazy property, 정확히 지연 저장 프로퍼티(lazy stored property)는 처음 사용되기 전까지 초기값이 계산되지 않는 프로퍼티를 의미합니다. 간단히 말해, 내가 만든 프로퍼티를 사용하기 전까지 메모리에 올려두지 않겠다는 의미입니다. lazy property는 프로퍼티의 초기값이 초기화가 끝나기 전까지 알 수 없는 외부 값에 의존적인 경우 유용합니다. 또한 초기값이 복잡한 계산나 셋업이 필요하지만 필요할 때까지 실행되지 않아야 할 때에도 유용합니다. 주의할 점 lazy 키워드가 붙어있다고 해서 해당 프로퍼티가 한 번만 초기화된다는 것을 보장하는 것은 아닙니다. 만일 멀티스레드환경에.. 2021. 10. 26.