728x90

Swift 48

precondition(_:_:file:line:)

안녕하세요. 이번에는 precondition이 뭔지 간단하게 알아볼게요. # 1. precondition 이란? precondition은 예상하지 못한 상황을 대비한 방어코드입니다. condition = false 일 경우, 예상하치 못한 상황이라고 판단하여 message를 출력해주고 precondition 이후의 코드가 실행되지 않습니다. func isLessThanOrEqualZero(num: Int) -> Bool { if num Bool { if num < 0 { throw MyError.lessThanZero } return true } precondition(test(num: 0)) // error: call can throw, but it is executed in a non-throwing..

Swift 2022.03.16

[Swift 5.6] Swift 5.6 추가된 기능들

안녕하세요. 이번에는 Swift 5.6에 새롭게 추가된 기능들에 대해 알아볼게요. Swift 5.6은 현재 베타 버전으로 올라온 Xcode 13.3에서 사용 가능하니 참고 부탁드려요. # 1. any 키워드 SE-0335에 소개된 신규 키워드 any는 existential types 앞에 붙는(앞으로 꼭 붙어야 할) 키워드예요. 좀 더 구체적인 설명에 앞서 다른 얘기를 먼저 해볼게요. 프로토콜을 사용하면 그 프로토콜을 채택한 구조체 또는 클래스에서 프로토콜의 요구사항을 준수하도록 구현해줘야 합니다. 예를 들어서, 아래처럼 Vehicle이란 프로토콜이 있고, protocol Vehicle { func travel(to destination: String) } Car라는 구조체가 Vehicle 프로토콜을 채..

Swift 2022.03.12

CryptoKit을 사용한 암호화

안녕하세요. 애플은 암호화를 위해 CryptoKit이라는 프레임워크를 제공해주고 있어요. 그래서 이번에는 CryptoKit 기본 사용법에 대해 알아보려고 합니다. # 1. 공개키(비대칭키) 암호화 일단 공개키 암호화가 뭔지 알아야겠죠??? ## 1.1 공개키 암호화란? 공개키 암호화 또는 비대칭키 암호화라고도 불려요. 공개키 암호화 방식에 필요한 것이 공개키와 개인키입니다. 공개키는 공개되어 있는 키로, 남들도 쉽게 알 수 있는 값이에요. (공개키를 서로 공유할 때, 탈취를 방지하기 위해서 디피 헬만 알고리즘이라는 것을 사용하기도 합니다.) 대신 개인키는 남들한테는 공유하지 않은, 나만 알고 있는 값입니다. 그래서 공개키와 개인키로 메시지를 암호화, 복호화를 하는 것이죠. (공개키로 암호화한 것은 개인키..

Swift 2022.02.23

async/await 용 public API를 추가할 때 고려사항

안녕하세요. 이번에는 SDK 개발자 입장에서 async/await 용 public API를 추가할 때 고려해야 할 사항에 대해 정리해볼게요. 이번 글은 아래 글을 토대로 작성하였습니다. - https://swiftindepth.com/articles/async-await-modules/ Xcode 13.2부터 async/await 구문을 iOS 13에서도 사용할 수 있게 된 것 알고 계신가요?? https://developer.apple.com/documentation/xcode-release-notes/xcode-13_2-release-notes#Swift Apple Developer Documentation developer.apple.com (Xcode 13.1을 사용할 경우엔 iOS 15 이상만 ..

Swift 2022.02.23

Core Data의 not Optional 설정 시 크래쉬 주의

안녕하세요. 이번에는 Core Data를 Optional로 설정했을 시 주의사항에 대해서 알아보겠습니다. 이번 글은 아래 글을 토대로 작성하였습니다. - https://atomicbird.com/blog/clash-of-the-optionals/ Clash of the Optionals …or, how to accidentally break Swift initialization rules. Today I’m going to talk about optionals. Swift optionals. And also another kind of optional. And how you might break the ironclad rules of Swift without realizing it until it’s t..

Swift 2022.02.20

enum 남용 주의

이번 글은 enum을 남용하는 경우에 대해 알아볼게요. Swift의 enum은 많은 기능을 제공하기 때문에 남용될 수 있습니다. Swift의 enum은 computed property라는 것을 제공하기 때문에 아래 같은 코드를 짜는 경우가 많습니다. enum Style { case headline case bodyText case emphasis var isBold: Boolean { // computed property - 값을 계산해서 return switch self { case .headLine, .emphasis: return true case .bodyText: return false } } var fontSize: CGFloat { switch self { case .headline: ret..

Swift 2022.02.17

Literal 이란?

ExpressibleByStringLiteral 프로토콜이 뭔지 궁금해서 공부하던 중, ExpressibleBy...Literal 프로토콜을 알려면 Literal이 뭔지 알아야 하겠더라구요... 그래서 이번 글에서는 Literal이 뭔지 우선 알아보고, 그다음에 ExpressibleBy...Literal 프로토콜도 살펴보겠습니다. #1 Literal 공식 Swift 문서를 토대로 이해한 내용을 적어보겠습니다. Literal이란, value 타입의 소스 코드 표현입니다. 아래를 보면 42, 3.14159, "Hello, world!"가 Literal입니다. 42 // Integer literal 3.14159 // Floating-point literal "Hello, world!" // String li..

Swift 2022.02.07

Swift 인스턴스 method 목록 가져오는 방법

Objecitve-C는 runtime.h를 사용하면 인스턴스 method 목록을 가져올 수 있지만 Swift는 쉽지 않더라구요... Swift에서 인스턴스 method 목록을 가져올 수 있는 꼼수(?)를 발견해서 내용을 정리합니다. #1 제약조건 Swift 클래스는 NSObject를 상속 받아야 합니다..ㅠㅠ @objc 태그가 붙은 method 정보만 가져올 수 있습니다...ㅠㅠ static method 정보는 읽어올 수 없습니다...ㅠㅠ #2 extension 추가 NSObject를 extension한 아래 코드를 추가해주세요. extension NSObject { static func methodList(className: String) -> [String]? { guard let someClass ..

Swift 2022.02.06