iOS/Swift 상식 30

Async/Await

async는 함수가 비동기로 처리된다는 것을 의미한다. await은 마킹된 곳은 potential suspension point(잠재적 일시 중단 지점)로 지정된다. async로 선언한 함수가 완료될 때까지 일시 중지 되는 지점이다. □ 예시 func asyncTest() async throws -> String { try await Task.sleep(nanoseconds: 3_000_000_000) //3초 return "sleep 끝" } print("before task") Task{ let string: String = try await asyncTest() print(string) } print("after task") // 출력 // before task // after task // sle..

iOS/Swift 상식 2023.07.23

Swift에서 타입 안전성(type safety)은 어떤 방식으로 보장되나요?

타입 안전성 (type safety) 결론부터 말하자면 Swift는 타입 안전성이 보장이 되어 있는 언어이다. Swift는 타입안정성을 추구하기 때문에 코드를 컴파일할 때 타입 확인 작업을 수행하고 잘못된 타입이 있다면 오류를 표시한다. 이는 개발 과정을 통해 오류를 빠르게 확인하고 수정을 가능하게 만들어서 안전성을 보장하게 된다. Swift 언어를 사용하다 보면 나는 타입을 명시해주지 않았는데 잘 돌아가는 경우가 있을 것이다.이것이 가능한 건 Swift가 타입 추론을 지원해 주는 언어이기 때문이다. let num = 3//타입을 명시하지 않았지만 컴파일 시 Int타입으로 추론 let name = "JJ"//타입을 명시하지 않았지만 컴파일 시 String타입으로 추론 위 예시처럼 타입을 명시해 주지 않아..

iOS/Swift 상식 2023.07.23

Optional Chaining과 nil-coalescing operator(??)의 차이점과 사용 시 주의사항은 무엇인가요?

코딩을 하다보면 구조체 내부에서 또다른 인스턴스가 들어오는 상황이 생긴다. 그러다 보면 프로퍼티를 따라서 들어가는 경우가 생기는데 이때 프로퍼티가 옵셔널인 경우 nil인지 아닌지 확인해야하는 경우가 있다. 예시를 보면 쉽게 알 수 있다. □ Optional Chaining 적용 안한 것 func guardJob(owner: Person?) { if let owner = owner { if let home = home { if let `guard` = home.guard { if let guardJob = `guard`.job { print("우리집 경비원의 직업은 \(guardJob)입니다") } else { print("우리집 경비원은 직업이 없어요") } } } } } □ Optional Chaini..

iOS/Swift 상식 2023.06.26

Codable

Codable = Encodable + Decodable Encodable은 data를 Encoder에서 변환해주려는 프로토콜로 바꿔주는 것 Decodable은 data를 원하는 모델로 Decode 해주는 것 Codable은 프로토콜이라서 Struct, enum, class 전부 채택 가능하다. struct User: Codable { enum CodingKeys: String,CodingKey { case id case name case birth case phoneNum = "phone_num" } let id: Int let name: String let birth: String let phoneNum: String } Enum CodingKeys CodingKeys는 json Key에서 사용하는 ..

iOS/Swift 상식 2023.06.26

Result Type

Result 타입은 Gerneric Enumeration으로 선언되어 있고 연관된 값의 성공과 실패를 나타낸다. 말만 들으면 뭔가 헷갈린다. 정의의 윗부분만 가져와 보았다. @frozen public enum Result where Failure : Error { /// A success, storing a `Success` value. case success(Success) /// A failure, storing a `Failure` value. case failure(Failure) enum 타입으로 구성되어 있고 각 case에 연관된 값을 표현한다 where 문법에 의해 failure의 경우에는 Error 타입만 입력받는다. 뭔지 잘 모를 땐?! 예시를 보면 이해를 쉽게 할 수 있다. enum P..

iOS/Swift 상식 2023.03.25

Some

Swift에서 Some 키워드는 리턴 타입을 자동으로 빠르게 추론할 수 있는 기능이다. 예를 보면서 이해하면 빠르게 이해할 수 있다. protocol Shape{ func describe() -> String } struct Square: Shape{ func describe() -> String { return "I'm Square" } } struct Circle: Shape{ func describe() -> String { return "I'm Circle" } } Shape 프로토콜 내부에 describe() 함수를 선언하고 구조체 Square, Circle을 생성하고 Shape 프로토콜을 상속받는다. 그러면 각 구조체에서 describe() 함수는 오버라이딩할 수 있게 된다. func make..

iOS/Swift 상식 2023.03.25

property wrapper

특징 특정 값을 한 번 감싸서 저장을 위한 로직(setter)과 얻어오기 위한 로직(getter)을 어느 정도 분리해서 반복을 줄여주는 방법을 제공한다. 키워드는 지역 변수에만 사용이 가능하다. @UserDefault, @State, @Binding등 많이 있다. 아마 SwiftUI를 사용해 보았다면 한 번쯤은 보았을 것이다. 예제를 살펴보면 쉽게 이해할 수 있다. @propertyWrapper struct Money{ private var money: Int init() {self.money = 0} var wrappedValue: Int{ get {return self.money} set {self.money += newValue} } } struct Bank{ @Money var firstPeopl..

iOS/Swift 상식 2023.03.10

defer

defer는 되게 신기하게 동작하는 기능이다. 특징 현재 코드 블록을 빠져나가기 전에 실행해야 하는 코드를 작성할 수 있다. 함수에서 오류가 발생하여 코드가 블록을 빠져가게 되면 해당 함수가 할당한 메모리를 안전하게 해제할 수 있다. 실행되는 순서는 다음 두 가지 규칙을 따른다. 실행 규칙 defer가 중복될 때 역순으로 실행된다. 하나의 defer는 선언된 코드 블록을 빠져나가기 직전에 실행된다. 예시를 통해 알아보면 빠르게 이해할 수 있다. class A{ func test() { defer { print("test 1") } do { defer { print("test 2") } print("test 3") } for i in 0..

iOS/Swift 상식 2023.03.09

Extension 이란?

Extension은 새로운 함수적 기능을 class, struct, enum, protocol에 확장한다는 의미를 가진다. Extension으로 타입에 추가할 수 있는 기능 연산 타입 프로퍼티/ 연산 인스턴스 프로퍼티 타입 메서드/ 인스턴스 메서드 이니셜라이저 SubScripts 중첩 타입 특정 프로토콜을 준수할 수 있도록 기능 추가 상속과 Extension의 차이점 상속 Extension 타입 클래스 타입만 가능 구조체, 클래스, 프로토콜 등에 적용 가능 특징 - 특정 타입을 물려받아 하나의 새로운 타입을 정의하고 추가 기능을 구현할 수 있음 - 수직 확장 - 기존 타입에 기능을 추가 가능 - 수평 확장 - 특정 타입을 준수하는 프로토콜 별 구현부를 분리하여 코드 가독성을 높일 수 있음 override..

iOS/Swift 상식 2023.03.08

Escaping 사용하기

Escaping의 특징을 잘 알지 못하는 분은 https://hj39-develop.tistory.com/143 Escaping 개념 Escaping은 탈출이라는 뜻으로 주로 Closure와 같이 사용한다. 탈출 클로저라고 부른다. Escaping 사용법 매개 변수 앞에 @Escaping 키워드를 사용한다. Escaping 종류 전달받은 클로저가 클로저 함수 외부로 hj39-develop.tistory.com 해당 블로그를 먼저 읽고 와주세요ㅎ escaping을 사용하기 앞서 클로저는 매개변수로 받아서 사용할 수 있다. (기억하기!) 아래 간단한 예시를 통해 매개변수로 받아온 클로저가 함수를 탈출하는 상황을 봐보자 func test(completion: () -> ()){ print("1") Dispat..

iOS/Swift 상식 2023.03.05