목록Swift (22)
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: 해당 플랫폼의 최소 지원 버전.`*`: 지정되지 않은 다..
`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..
1. weak와 unowned란?Swift에서는 메모리 관리를 위해 강한 참조(Strong Reference), 약한 참조(Weak Reference), 비소유 참조(Unowned Reference)를 제공.weak와 unowned는 참조 타입 사이에서 강한 순환 참조(Strong Reference Cycle)를 방지하는 데 사용.둘 다 ARC(Automatic Reference Counting)의 메모리 누수 문제를 해결하는 데 중요한 역할.2. weak와 unowned의 공통점강한 참조(Strong Reference)를 생성하지 않음.참조하는 인스턴스가 메모리에서 해제될 수 있도록 함.강한 순환 참조를 방지하여 메모리 누수를 줄임.3. weak와 unowned의 차이점 weakunowned참조 대상O..
1. `self`: 현재 인스턴스를 나타내는 키워드`self`는 현재 인스턴스 자체를 참조.Swift에서 모든 인스턴스 메서드와 이니셜라이저에는 암묵적으로 `self`가 포함되어 있으며, 필요한 경우 이를 명시적으로 사용 가능.1.1 사용 목적현재 인스턴스 참조메서드나 이니셜라이저 내부에서 `self`를 사용하면, 해당 메서드가 호출된 인스턴스를 참조.이를 통해 인스턴스 프로퍼티에 접근하거나 인스턴스 메서드를 호출할 수 있음.이름 충돌 해결이니셜라이저나 메서드의 파라미터 이름이 인스턴스 프로퍼티와 동일한 경우, `self`로 인스턴스 프로퍼티를 참조.클로저 캡처클로저 내부에서 `self`를 사용하면, `self`가 클로저 외부의 인스턴스를 참조.1.2 동작 원리와 예제struct Car { var ..
1. `associatedtype`이란?`associatedtype`은 프로토콜 내에서 사용되는 타입의 플레이스홀더를 정의하는 데 사용.이를 통해 프로토콜을 채택하는 타입이 구체적인 타입을 지정하도록 요구할 수 있음. `associatedtype`은 프로토콜을 보다 유연하고 재사용 가능하게 만들어 줌.특히, `Generic`과 함께 사용하면 강력한 타입 추론과 코드 유연성을 제공할 수 있음.2. `associatedtype` 기본 문법protocol ProtocolName { associatedtype TypeName // 프로토콜 요구 사항}`associatedtype`은 프로토콜의 타입 매개변수와 같은 역할.프로토콜을 채택한 타입은 `associatedtype`으로 선언된 타입을 구현하면서..