목록Swift (25)
J
네트워크 통신을 진행하면서 body를 전달할 때 인코딩 과정이 필요하다는 것은 알 것이다.struct 형태의 데이터를 json으로 인코딩해서 서버에 전달해야 하기 때문이다.그런데 여기서 json으로 인코딩할 때 어떻게 할 것인지를 정할 수 있는 enum이 존재한다.그게 바로 JSONEncoder.KeyEncodingStrategy이다.예시 struct를 한 가지 두고 설명을 해보겠다.struct Person { let name: String let birthDay: Date}첫 번째 방법은 case convertToSnakeCase 이다.이는 swift에서 camelCase로 작성된 것들을 snakeCase로 변경한다.즉 birthDay → birth_day, 이렇게 변환하여 전달한다. 두번째..
`@available``@available`는 Swift 코드에서 특정 플랫폼과 버전 조건에 따라 접근 가능성을 선언하는 데 사용.이는 컴파일러에게 해당 코드가 특정 플랫폼 버전 이상에서만 사용할 수 있음을 알리기 위한 주석으로 작동.주로 함수, 클래스, 구조체, 프로토콜, 속성 등 선언부에 사용.1. `@available` 기본 문법@available(platformName version, *, deprecated: version, message: "reason")주요 구성 요소platformName: iOS, macOS, watchOS, tvOS 등의 플랫폼 이름.version: 플랫폼 버전 번호.`*`: 다른 모든 플랫폼을 포함.deprecated: 코드가 특정 버전 이상에서 더 이상 권장되지 않음..
`#available``#available`는 Swift에서 런타임 시점에 특정 플랫폼 및 버전 조건을 검사하여 실행 흐름을 제어하는 데 사용.이는 코드가 실행되는 환경이 특정 플랫폼 버전을 지원하는지 확인하고, 지원 여부에 따라 다른 동작을 수행할 수 있게 함.런타임 조건문으로 동작하며, 주로 API 가용성 검사에 사용.1. `#available`의 문법if #available(platformName version, *, ...) { // 해당 버전 이상에서 실행할 코드} else { // 하위 버전에서 실행할 코드}주요 구성 요소platformName: 플랫폼 이름 (iOS, macOS, watchOS, tvOS 등).version: 해당 플랫폼의 최소 지원 버전.`*`: 지정되지 않은 다..
버전 대응 WrapperSwift 애플리케이션에서 iOS, macOS 등 특정 플랫폼 버전에 따라 코드를 실행하거나 기능을 활성화해야 하는 경우가 종종 존재.이러한 요구를 처리하기 위해 버전 대응 Wrapper를 활용하여 코드의 가독성과 재사용성을 높일 수 있음.1. 기본 버전 조건 처리Swift는 @available 및 #available 키워드를 사용하여 플랫폼 및 버전 조건을 확인.if #available(iOS 16, macOS 13, *) { print("iOS 16 이상에서 동작")} else { print("이전 버전에서 동작")}#available: 실행 시점에서 조건 확인.@available: 컴파일 시점에서 사용 가능성을 표시.예제: 뷰에 버전 따라 다른 스타일 적용struc..
1. Property WrapperPropertyWrapper는 Swift에서 속성의 동작을 캡슐화하여 속성 접근과 변경에 특정 로직을 추가할 수 있도록 지원하는 기능.반복적인 코드를 줄이고 속성의 동작을 추상화하여 재사용 가능한 구조를 제공.@propertyWrapper를 사용해 정의되며, SwiftUI의 @State, @Binding, @AppStorage 등이 대표적인 예.2. Property Wrapper 기본 구조@propertyWrapperstruct ClampedValue { private var value: Int private let range: ClosedRange var wrappedValue: Int { get { value } set..
1. Opaque Type (some 키워드)Swift의 Opaque Type은 함수나 속성이 반환하는 구체적인 타입을 숨기고 대신 타입 정보를 추론할 수 있도록 하는 기능.Ssome 키워드를 사용하여 선언하며, 내부적으로 반환되는 타입이 하나로 고정되지만, 호출자는 타입 정보를 알 필요 없이 사용 가능.이 기능은 Generic과 비슷해 보이지만, 동작 방식에서 중요한 차이점이 존재.Opaque Type은 주로 캡슐화와 유연한 반환 타입 설계에 사용.2. Opaque Type 사용법func makeOpaqueShape() -> some Shape { Circle() // Shape 프로토콜을 준수하는 Circle 반환}반환 타입이 some Shape로 정의되었으므로, 함수는 Shape 프로토콜을 준..
`map`, `compactMap`, `flatMap`은 Swift의 고차 함수로 컬렉션, 옵셔널, 시퀀스 등 변환 작업을 적용할 때 사용.이들은 각기 다른 방식으로 데이터를 변환하고, 특정 조건에 따라 값을 필터링하거나 중첩된 구조를 평탄화.1. `map`컬렉션이나 옵셔널, 시퀀스의 각 요소에 주어진 변환 함수를 적용하여 새로운 컬렉션이나 값을 생성.원래의 데이터 구조는 유지.컬렉션에서 사용let numbers = [1, 2, 3, 4]let squaredNumbers = numbers.map { $0 * $0 }print(squaredNumbers) // 결과: [1, 4, 9, 16]옵셔널에서 사용let optionalValue: Int? = 3let result = optionalValue.map..
1. Swift의 init이란?Swift에서 init은 클래스, 구조체, 또는 열거형의 생성자(Initializer)로, 인스턴스를 초기화하는 역할.init 메서드는 인스턴스의 모든 저장 프로퍼티를 초기화하고, 초기 상태를 설정함.2. init의 기본 특징모든 저장 프로퍼티 초기화저장 프로퍼티는 초기화되지 않으면 에러가 발생하게 됨.반환 값이 없음init 메서드는 특별히 반환값을 가지지 않음.자동 초기화 제공Swift는 프로퍼티에 초기값이 있거나, 모든 프로퍼티가 초기화 가능한 경우 자동 초기화 메서드를 제공.3. 기본 문법struct Person { var name: String var age: Int init(name: String, age: Int) { self.name..