ios 33

App thinning

애플리케이션을 설치할 때, 앱스토어와 운영체제가 디바이스의 환경에 맞게 설치하는 설치 최적화 기술 필요한 만큼의 리소스만 다운로드하기에 적은 디스크 사용량, 빠른 다운로드를 제공 Slicing 여러 가지 디바이스와 운영체제를 위한 앱 번들의 variants(변형)을 생성 및 제공하는 과정 variants(변형)에는 각 디바이스와 운영체제가 필요로 하는 실행 가능한 아키텍처와 리소스가 담겨있다. 개발자가 앱스토어 커넥트에 풀버전의 앱 빌드를 업로드하게 되면 앱스토어는 자동적으로 variants를 생성하고 전달한다. 유저가 앱스토어에서 앱을 다운로드하게 되면, 유저의 디바이스와 운영체제 버전에 맞는 variants를 다운로드하게 된다. on-demand resource(ODR) 주문형 리소스는 이미지, 음원..

iOS/iOS 상식 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

프로토콜이란?

프로토콜 정의 protocol은 Swift의 class나 struct의 함수를 정의하는 역할을 한다. swift에서 protocol은 타입으로 작용한다. 예를 들어서 알아보자 protocol은 Swift의 class나 struct의 함수를 정의하는 역할을 한다. protocol Animal{ func sleep() } class Dog: Animal{ func sleep(){ print("dog sleep") } } protocol에서 Animal의 행동을 정의만 해 놓는다. protocol 내부 함수를 사용하기 위해서는 class, struct를 생성한 후에 상속을 받아 사용해야 한다. swift에서 protocol은 타입으로 작용한다. protocol Animal{ func sleep() } clas..

iOS/Swift 상식 2023.02.21

Swift - String의 SubScript 접근

SubScript의 개념을 모른다면 Swift 문법과 친해지기 - Subscript 편을 읽고 오시면 됩니다.! Swift 문법과 친해지기 - Subscript subscript 서브스크립트는 우리가 배열을 사용할 때 배열 속 원소에 접근하기 위해 사용하는 대괄호 []를 지칭한다. □ 배열 서브스크립트 정의 → index를 int타입으로 받고 Element를 반환한다. □ 딕 hj39-develop.tistory.com 우리가 문자열을 사용할 때 각 문자하나를 추출하여 사용하고 싶을 때가 있을 것이다. var num: String = "12345" print(num[0])//오류 특히 백준 알고리즘 문제를 풀 때 Swift를 사용하는 사람은 드물겠지만.. 아무튼 String타입으로 들어온 값을 분리하여 ..

iOS/Swift 상식 2023.01.23

Swift - Optional

Optional은 Swift를 처음 접해본 사람들이 헷갈리는 부분들 중 한 부분을 담당하고 있다. 간단하게 설명하자면 Optional은 변수에 값이 있을 수도 있고 없을 수도 있다. 즉 nil(값이 없음)을 허용할 것인지 허용하지 않을 것인지 결정하는 기능이다. nil은 다른 언어의 NULL과 다르다. nil은 해당 공간에 값이 없는 경우 값 대신 nil을 사용하지만 다른 언어의 NULL은 빈 포인터를 가리킬 때 NULL을 사용한다. Optional을 쉽게 이해하기 위해 예를 들어 생각해 보자 (예시를 설명하는 문장은 기울임 꼴을 적용하였다.) 어떤 변수에 Optional을 붙인다는 것 우리가 호텔을 체크인하는 것과 같다. 체크인을 하면 방을 배정받게 된다. Optional을 사용하면 Wrapping이 ..

iOS/Swift 상식 2023.01.23

Swift - Any vs AnyObject

Any Any를 직역하면 '아무거나'라는 의미이다. 이름에서 알 수 있듯이 모든 타입의 인스턴스들을 허용한다는 뜻이다. AnyObject AnyObject의 정의를 살펴보면 프로토콜이다! 모든 클래스가 암시적으로 준수하는 프로토콜 즉 클래스 타입만 가능하다!라는 의미!! 이해하기 쉽게 Object는 클래스를 통해 생성된다. (작명의 중요성) 따라서 AnyObject는 모든 클래스 타입의 인스턴스들을 나타낼 수 있다. 너무 허무하네..; # 참고한 사이트 https://zeddios.tistory.com/213

iOS/Swift 상식 2023.01.23

Swift - Convenience init

Init의 종류에는 2가지가 존재한다. Designated init convenience init Init은 멤버들을 초기화하고 상속받은 멤버들을 커스텀하기 위해 사용한다. (Designated) Init (Designated) Init은 우리가 클래스를 생성할 때 자주 사용했던 Init이다. 해당 Init은 클래스의 프로퍼티가 모두 초기화되게 만들어준다. class Pet{ var dog: String var cat: String init(dog: String, cat: String){ self.dog = dog self.cat = cat } } Convenience init Convenience init은 Designated init을 보조하여 도와주는 역할이다. 말 그대로 보조이므로 Designat..

iOS/Swift 상식 2023.01.23

Swift - Copy On Write(COW) 동작 방식

Copy on Write를 알아보기 전에 학교에서 C언어를 배울 때 지겹도록(?) 들었던 Call-by-Value Call-by-Reference 위 두 가지를 복습 차원으로 알아보자 Call-by-Value 영어 뜻을 직역으로 해석하자면 값의 호출인데 느낌 상 알 수 있듯이 값을 호출할 때 데이터를 복사하여 호출한다는 것이다. 예를 들어 int a = 1; int b = a; b = 3; printf("%d",a);// 1 printf("%d",b);// 3 다음과 같이 호출한다면 변수 a에 1을 메모리에 저장하고 그 값을 b에 저장하는 경우 같은 공간을 가리키는 것이 아닌 메모리에 새로운 공간을 할당하여 값을 복사하게 된다. 따라서 b의 값을 3으로 변경하게 되면 b의 값은 3으로 변경되지만 a의 값..

iOS/Swift 상식 2023.01.23

UIKit에서 SwiftUI Preview 사용하기

UI를 코드로 작성할 때 매번 시뮬레이터를 실행하기 매번 번거롭다. 그럴 경우 Preview를 사용하여 내가 작성한 코드를 쉽게 볼 수 있다. □ 코드 1 import SwiftUI #if DEBUG extension UIViewController { private struct Preview: UIViewControllerRepresentable { let viewController: UIViewController func makeUIViewController(context: Context) -> UIViewController { return viewController } func updateUIViewController(_ uiViewController: UIViewController, context:..

iOS 2023.01.19