Swift 11

Swift ) Two-Phase Initialization?

이번 포스팅에서는 Swift의 Two-Phase Initialization에 대해서 알아보겠습니다. class SomeSubClass: SomeSuperClass { let someProperty: String init(someProperty: String) { super.init() } } 제가 Two-Phase Initialization을 가장 많이 접할 수 있는 코드는 바로 위와 같이 코드를 작성할 때였습니다. 위의 코드를 작성하면 바로 문구가 하나 뜨는데 Property 'self.someProperty' not initialized at super.init call 이런 문구입니다. 과연 왜 self.someProperty가 super.init 호출 시점에 초기화되어있지 않다고 코드를 빌드조차 ..

Swift 2022.05.27

Swift ) Designated Initializer, Convenience Initializer

Designated Initializer? designated initializer는 클래스의 기본적인 이니셜라이저입니다. 보통 클래스에서 이니셜라이저를 생성하면 작성하게 되는 init(parameters) { statements } 이런 형태를 가진 이니셜라이저를 designated initializer라고 합니다. 클래스는 상속이 가능하기에, 이 designated initializer는 정말 중요한 역할을 합니다. 바로 상위 클래스(super class)의 이니셜라이저를 delegate하는 역할을 수행할 때 사용하기 때문입니다. class User { let email: String let name: String let authority: String init(email: String, name: ..

Swift 2022.05.02

Swift ) Difference between components and split

저는 주로 백준 온라인 저지의 알고리즘 문제를 풀 때, split 메서드를 사용하여 인풋을 공백 단위로 받아오곤 했는데, components를 사용하는 방법도 있어 아래와 같이 두 가지 코드를 번갈아가며 사용했었습니다. let input = readLine()?.split( ... ) let input = readLine()?.components( ... ) 이번 포스팅을 통해 두 메서드의 차이점을 한번 알아보도록 하겠습니다. components return [String] split return [Substring] 가장 눈에 띄게 확인할 수 있었던 차이점은 리턴타입입니다. func components(separatedBy separator: T) -> [String] where T : StringPr..

Swift 2022.04.19

Swift ) What is AnyObject?

최근에 공부를 하면서 AnyObject의 정확한 의미를 알지 못해 겪은 오류가 있어, 이번에 확실히 이해하고 넘어가기 위해 AnyObject에 대해서 알아보겠습니다. protocol MyViewControllerDelegate { func someFunction() } class MyViewController: UIViewController { weak var delegate: MyViewControllerDelegate? // Error! } 에러의 내용은 다음과 같습니다. 'weak' must not be applied to non-class-bound 'MyViewControllerDelegate'; consider adding a protocol conformance that has a class..

Swift 2022.04.06

Swift ) URL에 한글이 들어갈때? (addingPercentEncoding)

URL에 한글이 들어가면? let stringURL = "https://joonswift.com/user/준스" print(URL(string: stringURL)) // nil String 타입의 stringURL에 제일 마지막 부분에 "준스" 라는 한글이 있습니다. 이 String을 URL로 변환하면, nil을 리턴하게 됩니다. Percent Encoding & URI 우선 PercentEncoding에 앞서 URI(Uniform Resource Identifier)에 대해서 알아보겠습니다. A Uniform Resource Identifier(URI) is a unique sequence of characters that identifies a logical or physical resource u..

Swift 2022.03.29

Type Methods (static func & class func)

이번 포스팅에서는 Type Methods 인 static func 그리고 class func 의 차이점에 대해서 정리해보려고 합니다. Type Methods? 우선 Type Methods에 대해 간단하게 설명해보자면, Type에서 호출 되는 methods를 말하는데, 여기서 Type은 Classes, Structures, Enumerations가 될 수 있습니다. Instance methods는 Type의 Instance가 가지고 있는 methods를 호출한다고 하면, Type methods는 Type 자체가 가지고 있는 methods를 호출하는 것입니다. static이라는 키워드를 func 앞에 붙이면서 선언할 수 있고, Classes의 경우에는 class 키워드를 static 대신에 사용할 수 있습니..

Swift 2022.03.23

Sequence

Iterator 패턴에 대해 공부를 하다보니, Sequence라는 녀석에 대한 공부가 필요한 것 같아서 빠르게 애플 공식문서를 보고 공부해보았습니다 ㅎㅎ! protocol Sequence Sequence 프로토콜은 어떤 요소들에 대한 순차적(Sequential), 반복적(Iterated) 접근을 제공하는 타입입니다. Sequence? Sequence는 한번에 접근할 수 있는 값들의 목록을 말합니다. Sequence의 요소들을 반복적으로 접근하는 가장 대표적인 방법은 for-in 루프가 있습니다. 이 Sequence 프로토콜을 채택하면, Sequence 에 대한 순차적인 접근(Sequential access)을 위해 이미 기본적으로 구현되어 있는 수많은 operation들에 접근할 수 있는 능력이 생긴다고..

Swift 2022.01.28

Unowned?

Unowned? CoreData를 공부하면서 많은 클로저에 아래와 같은 형식으로 쓰는것을 보고 unowned에 대해서 찾아보게 되었습니다. { [unowned self] 변수 in } Unowned variables는 weak variables와 소유권(ownership)이 없는 상태에서 데이터를 참조할 수 있는 방법을 제공하는 점에서 유사한 면이 있습니다. 그러나, weak variables같은 경우에는 nil이 될 수 있습니다. 반면에 unowned variables는 initialized되고 나면, nil이 될 수 없습니다. 즉, optional unwrapping을 걱정할 필요가 없다는 의미입니다. 그렇다면 자주 쓰이는 형식인 위의 코드에 클로저 내부에 있는 [unowned self]의 의미는 무..

Swift 2021.02.28

Dispatch(2) : Sync / Async / main / global

이번 포스팅에서는 Sync, Async, main, global에 대해서 알아보도록 하겠습니다! [Instance Method] Sync Sync란 Work Item을 Queue에다가 실행을 위해 제출하고, 해당 block이 실행을 마치면, 리턴해주는 메서드 입니다. dispatchQueue.sync { } dispatchQueue.sync(execute: ) 이런 방식으로 만들어질 수 있습니다! 1 ~ 5 그리고 6 ~ 10 까지 출력을 하는 두가지의 for 구문을 작성하여 sync block에 넣어서 코드를 작성해 보겠습니다. dispatchQueue.sync { for i in 1...5 { print("\(i)") } } dispatchQueue.sync { for i in 6...10 { pri..

Swift 2021.01.13

Dispatch(1) : What is Dispatch and Dispatch Queue?

[Framework] Dispatch? Dispatch란 멀티코어 하드웨어 환경에서 시스템이 관리하는 Dispatch Queues에 작업을 제출하여 코드를 동시에 실행시킬 수 있는 방법입니다. Grand Central Dispatch(GCD)라고도 알려져 있는 Dispatch는 macOS, iOS, watchOS, tvOS의 멀티코어 하드웨어에서 동시성 코드 실행을 도와주는 체계적이고 포괄적인 개선 기능을 제공하는 언어 기능, 런타임 라이브러리, 시스템 향상을 포함합니다. BSD 서브시스템, Core Foundation, Cocoa APIs 는 모두 향상된 기능을 활용하여 시스템과 애플리케이션을 보다 빠르고 효율적으로, 그리고 향상된 응답성으로 실행할 수 있도록 확장되었습니다. 컴퓨팅 코어의 개수가 서로..

Swift 2021.01.13