728x90

Swift 48

Modeling errors

안녕하세요. 이번에는 Swift에서 throw-catch 키워드를 사용한 Error 처리 방식을 개선할 수 있는 3가지 관점에 대해서 소개해보려고 합니다. 우선 아래 코드를 볼까요? actor InMemoryCache { enum ErrorKind: Error { case noValue(Key) case outOfMemory(availableBytes: Int) } private var memoryLimit: Int init(memoryLimit: Int) { self.memoryLimit = memoryLimit } func get(for key: Key) throws -> Value { guard contains(key: key) else { throw ErrorKind.noValue(key) } /..

Swift 2022.05.27

클로저에서 [weak self] 사용할 때 주의할 점3

안녕하세요. [weak self] 관해서 얘기가 좀 많은가 봐요..허헣... 아래 글에서 [weak self] 관련한 얘기들을 다뤄봤는데요, 클로저에서 [weak self] 사용할 때 주의할 점 클로저에서 [weak self] 사용할 때 주의할 점 안녕하세요. 클로저 안에서 [weak self]를 쓰는 Swift 코드를 적지 않게 볼 수 있어요. 그 이유는 메모리 누수(memory leak)를 막기 위해서인데요, 만약, 클로저 안에서 [weak self]와 함께 guard-let 구문을 사 phillip5094.tistory.com 클로저에서 [weak self] 사용할 때 주의할 점2 클로저에서 [weak self] 사용할 때 주의할 점2 안녕하세요. 저번 글에서 [weak self]를 쓸 때 주의할 ..

Swift 2022.05.21

클로저에서 [weak self] 사용할 때 주의할 점2

안녕하세요. 저번 글에서 [weak self]를 쓸 때 주의할 점에 대해서 알아봤는데요. 클로저에서 [weak self] 사용할 때 주의할 점 클로저에서 [weak self] 사용할 때 주의할 점 안녕하세요. 클로저 안에서 [weak self]를 쓰는 Swift 코드를 적지 않게 볼 수 있어요. 그 이유는 메모리 누수(memory leak)를 막기 위해서인데요, 만약, 클로저 안에서 [weak self]와 함께 guard-let 구문을 사 phillip5094.tistory.com 비슷한 내용이지만 좀 다른 내용과 예시가 설명되어 있는 글이 있어서, 그 글을 읽고 내용을 정리해보려고 합니다. ## 0. Retain Cycle이 발생하는 예시 우선 retain cycle이 발생하는 예시를 들어볼게요. 그러..

Swift 2022.04.24

클로저에서 [weak self] 사용할 때 주의할 점

안녕하세요. 클로저 안에서 [weak self]를 쓰는 Swift 코드를 적지 않게 볼 수 있어요. 그 이유는 메모리 누수(memory leak)를 막기 위해서인데요, 만약, 클로저 안에서 [weak self]와 함께 guard-let 구문을 사용해서 접근할 인스턴스를 non-optional로 바꿨을 때, 이건 strong reference일까요 weak reference일까요?? 그리고 클로저를 중첩(nested)시킨다면??? 이번 글에서는 요런 궁금한 점들을 알아보는 시간을 가져볼게요. 이후 아래 글도 같이 봐주세요~^^ - 클로저에서 [weak self] 사용할 때 주의할 점2 클로저에서 [weak self] 사용할 때 주의할 점2 안녕하세요. 저번 글에서 [weak self]를 쓸 때 주의할 점에..

Swift 2022.04.16

Automatic Reference Counting (ARC)

안녕하세요. 이번에는 Swift 공식 문서에 있는 Automatic Reference Counting (줄여서 ARC) 문서를 읽고 정리해보려고 해요. # 1. Overview Swift는 앱의 메모리 사용을 관리하기 위해서 Automatic Reference Counting(ARC)를 사용합니다. ARC는 필요 없는 클래스 인스턴스에 대해서 메모리를 해제해줍니다. 그래서 사용자는 메모리 관리에 대해서 걱정하지 않아도 돼요ㅎㅎ 그런데 몇몇 경우에 ARC가 메모리 관리를 하기 위해 코드와 코드 간의 더 많은 정보를 요구하는 경우가 있어요. 이런 상황과 더불어 앱의 모든 메모리를 ARC가 관리할 수 있도록 하는 방법에 대해 알아보려고 해요. (Reference Counting은 클래스 인스턴스에만 적용됩니다..

Swift 2022.04.10

subscript

안녕하세요. 이번에는 Swift의 subscript에 대해 알아볼게요. 클래서, 구조체, 열거형에서 subscript 정의가 가능합니다. 그럼 subscript란 무엇이냐? subscript를 사용하면 collection, list, sequence의 element에 쉽게 접근할 수 있어요. (Array의 someArray[index] 또는 Dictionary의 someDictionary[key] 처럼 말이죠!) 또한 하나의 타입에 여러 개의 subscript를 구현할 수 있고, overload도 가능해요. ## 1. Subscript Syntax subscript 키워드를 사용해서 subscript를 정의할 수 있어요. subscript는 read-write 또는 read-only로만 구현이 가능합..

Swift 2022.04.03

Struct와 Class

안녕하세요. 이번에는 기초적이면서도 중요한 Struct와 Class의 공통점과 차이점에 대해 간략하게 정리해보려고 합니다. # 1. Struct와 Class 공통점 value를 저장할 프로퍼티를 정의할 수 있습니다. method를 정의할 수 있습니다. subscript syntax(.)으로 value에 접근이 가능합니다. 생성자(initializer)를 정의할 수 있습니다. 확장이 가능합니다. 프로토콜 채택이 가능합니다. 사실 공통점은 뻔한 얘기들이라... 다들 알고 계실 것 같아요ㅎㅎ 더욱 중요한 차이점에 대해 알아볼게요. # 2. Struct와 Class 차이점 ## 2.1 클래스는 상속이 가능합니다. class Animal { var age: Int = 0 } class Person: Animal ..

Swift 2022.04.02

FormatStyle

안녕하세요. 이번에는 iOS 15에 추가된 FormatStyle에 대해 간단하게 알아보고, Custom FormatStyle 만드는 방법도 같이 알아볼게요. FormatStyle은 iOS 15에 추가된 프로토콜입니다. 기본으로 제공되는 style도 되게 여러 종류가 있어요. (number, percent, timeDuration 등) ## 1. 기본 사용법 formatted() method를 사용하면 value -> string으로 변환되어서 출력되며, 자동으로 localization까지 지원해줍니다. Date(timeIntervalSinceReferenceDate: 0).formatted()// "1/1/2001, 9:00 AM" Measurement(value: 20, unit: UnitDuratio..

Swift 2022.03.24

PersonNameComponents를 사용해서 이름 파싱하기

안녕하세요. 이번에는 이름을 등록하면 알아서 파싱이 되는 PersonNameComponents에 대해 알아볼게요. 보통 이름을 파싱 하고 싶다면, 문자열을 split(separator:) method를 사용해서 파싱 하는 방법을 가장 쉽게 떠올릴 수 있습니다. 하지만, 우리의 갓플은 PersonNameComponents라는 구조체를 제공해주고 있었어요...ㅎ 요게 편리한 기능들을 이것저것 가지고 있더라구요??ㅎㅎㅎ... 그래서 한번 알아보려고 합니다. ## 1. PersonNameComponents 사용법 PersonNameComponents는 아래처럼 사용할 수 있어요. let name = "John Lennon" var nameComponents = try PersonNameComponents(nam..

Swift 2022.03.23

[오픈소스] Flow

안녕하세요. 이번에는 Flow라는 오픈소스를 직접 써보는 시간을 가져볼게요. This library provides a bunch of extension methods for a better fluent syntax in Swift. This style is very useful for some operations that benefit from being able to be chained (composed) together. Flow 라이브러리는 Swift의 가독성을 높이는 확장 method를 제공합니다. 살펴볼게요ㅎㅎ ## 1. then then method는 copy한 인스턴스를 리턴하기 때문에, 주로 인스턴스를 초기화할 때 사용합니다. 초기 설정들을 블록 안에서 처리하기 때문에, 초기화를 어떻게 ..

Swift 2022.03.16