본문 바로가기

iOS43

Swift 에서 선언된 enum을 Objc 코드에서 사용하기 개발하다보니 Swift 에서 선언된 enum 타입을 objc 코드에서 사용해야할 일이 있었는데요. objc 코드로 된 .m 파일과 .h 파일에서의 사용방법이 조금 다른 것 같아 게시글로 정리해두려 합니다. 무엇보다 objc 헤더 파일에서 swift 로 선언된 enum을 사용하는 방법은 검색해도 안나와서 결국 스스로 해결하지는 못했습니다..ㅎㅎ 그럼 빠르게 본론으로 들어가겠습니다. objc .m 파일에서 Swift 로 선언된 enum 타입 사용하기 일단 아래 코드처럼 Swift 로 enum이 선언되어 있다고 가정합니다. objc 파일에서 사용해야하니 @objc 키워드도 추가합니다. @objc enum FoodType: Int { case none case egg case milk case cake } 그럼.. 2023. 3. 13.
Swift-11. 고차 함수 - map, filter, reduce ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 고차함수 # - 고차함수(Higher-order-function)는 '다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수'를 말합니다. - 고차함수 중에서도 map, filter, reduce 함수는 스위프트 표준 라이브러리의 컨테이너 타입(Array, Set, Dictionary 등)에 구현되어 있습니다. [ map ] - 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너를 생성 /* 변형하고자 하는 numbers와 변형 결과를 받을 dn, str 선언 */ let numbers: [Int] = [0, 1, 2, 3, 4] var dn: [Int] var str: [String] /* 1. 기존의 for 구문 .. 2023. 2. 24.
Swift-10. 오류 처리 - throw, rethrows, defer ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 오류 발생 # - 스위프트에서 오류는 Error라는 프로토콜을 준수하는 타입의 값을 통해 표현됩니다. - Error 프로토콜은 사실 상 요구사항이 없는 빈 프로토콜일 뿐이지만, 오류를 표현하기 위한 타입(주로 열거형)은 이 프로토콜을 채택합니다. [ 오류 표현 ] - Error 프로토콜과 (주로) 열거형을 통해서 오류를 표현 /* 자판기 동작 오류의 종류를 표현한 VendingMachineError 열거형 */ enum VendingMachineError: Error { case invalidInput case insufficientFunds(moneyNeeded: Int) case outOfStock } [ 함수에서 발생한 오류 던지기.. 2023. 2. 24.
Swift-9. 프로토콜(protocol), 익스텐션(extension) ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 프로토콜(protocol) # - 구조체, 클래스, 열거형 등에 프로토콜을 이용해서, 어떠한 기능을 구현해놔야 하는지 알려줍니다. - 클래스 상속은 클래스끼리만 가능했던 것과 달리, 프로토콜을 따르는 것은 클래스 뿐만 아니라 value type인 struct, enum에도 적용 가능합니다. - 따라서 보다 넓은 확장성과 재사용성을 보장합니다. protocol pName { /* 프로토콜 정의 */ } [ 프로퍼티 요구 ] protocol Talkable { /* 프로퍼티 요구 - 항상 var 사용 */ var topic: String { get set } // 읽고 쓰기 모두 가능 var language: String { get } //.. 2023. 2. 24.
Swift-8. assert, precondition, guard ** edwith - Swift 프로그래밍 입문 강의 참고 ** assert - assert(_:_:file:line:) 함수 사용 - 디버깅 모드에서만 동작 (실제 배포 환경에서는 동작 X) - 예상했던 조건의 검증을 위해 사용 - 디버깅 모드에서 assert() 등을 통해 애플리케이션이 죽으면, 죽은 위치가 확실하게 보여집니다. 이를 통해 버그를 방지하거나 디버그에 유용한 정보로 사용할 수 있습니다. var someInt: Int = 0 // 검증 조건과, 검증 실패시 나타날 문구 작성 // assert(someInt == 0, "someInt != 0") someInt = 1 assert(someInt == 0) // 동작 중지, 검증 실패 assert(someInt == 0, "someInt !=.. 2023. 2. 24.
Swift-6. 옵셔널 체이닝, nil 병합 ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 옵셔널 체이닝 # - 옵셔널 체이닝은 옵셔널 내부의 내부의 내부로 옵셔널이 연결되어 있을 때 유용하기 활용 가능 - 매번 nil 확인을 하지 않고 최종적으로 원하는 값이 있는지 없는지 확인 가능 class Person { var name: String var job: String? var home: Apartment? init(name: String) { self.name = name } } class Apartment { var buildingNumber: String var roomNumber: String var 'guard': Person? var owner: Person? init(dong: String, ho: String) .. 2023. 2. 24.
Swift-5. 인스턴스 생성 및 소멸 ** edwith - Swift 프로그래밍 입문 강의 참고 ** # init / deinit # 인스턴스를 생성하는 이니셜라이저(init)와 클래스의 인스턴스가 소멸될 때 호출되는 디이니셜라이저(deinit) 프로퍼티 초기값 - swift의 모든 인스턴스는 초기화와 동시에 모든 프로퍼티에 유효한 값이 할당되어 있어야 함. - 프로퍼티에 미리 기본값을 할당해두면 인스턴스가 생성됨과 동시에 초기값을 지니게 됨. class PersonA { // 모든 저장 프로퍼티에 기본값 할당 var name: String = "unknown" var age: Int = 0 var nickName: String = "been" } // 인스턴스 생성 let eenii: PersonA = PersonA() // 기본값이 인스.. 2023. 2. 24.
Swift-4. 클로저, 프로퍼티 ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 클로저 # - 실행가능한 코드 블럭 - 함수와 다르게 이름정의는 필요하지 않지만, 매개변수 전달과 변환 값이 존재할 수 있다는 점이 동일 - 함수는 이름이 있는 클로저 - 일급객체로 전달인자, 변수, 상수 등에 저장 및 전달이 가능 // 클로저 기본 문법 { (/* 매개변수 목록*/) -> /* 반환 타입 */ in /* 실행 코드 */ } // 클로저 사용 // sum이라는 상수에 클로저 할당 let sum: (Int, Int) -> Int = { (a: Int, b: Int) in return a + b } let sumResult: Int = sum(1, 2) print(sumResult) // 3 // 함수의 전달인자로서의 클로저.. 2023. 2. 24.
Swift-3. 구조체, 열거형 ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 구조체 # - swift 대부분 타입은 구조체로 되어 있습니다. - 구조체는 값(value) 타입 - 타입이름은 대문자 카멜케이스를 사용하여 정의 // 구조체 기본 문법 struct /*이름*/ { /* 구현부분 */ } // 구조체 property 및 method 구현 struct Sample { // 가변 프로퍼티 : 값 변경 가능 var mutableProperty: Int = 100 // 불변 프로퍼티 : 값 변경 불가능 let immutableProperty: Int = 100 // 타입 프로퍼티 : static 키워드 사용 - 타입 자체가 사용하는 프로퍼티 static var typeProperty:Int = 100 // 인스.. 2023. 2. 24.
Swift-2. 반복문, 옵셔널/옵셔널체이닝/옵셔널바인딩 ** edwith - Swift 프로그래밍 입문 강의 참고 ** # 반복문 # for - in 구문 // for-in 구문 기본 형태 for item in items { /* 실행 구문 */ } // 예시 var number = [1, 2, 3] let people = ["yagom": 10, "eric": 15, "mike": 12] for num in number { print(num) } for (name, age) in people { print("\(name): \(age)") } repeat - while 구문 // repeat-while 구문 기본 형태 repeat { /* 실행 구문 */ } while /* 조건 */ // 예시 repeat { number.removeLast() } whi.. 2023. 2. 24.
Swift-1. 변수, 리스트, 함수 ** edwith - Swift 프로그래밍 입문 강의 참고** # 콘솔로그 # print 단순 문자열 출력 dump 인스턴스의 자세한 설명(description property)까지 출력 # 문자열 보간법 # 프로그램 실행 중 문자열 내에 변수 또는 상수의 실질적인 값을 표현하기 위해 사용 // 예시 import Swift let a: Int = 2 let b: Int = 3 print("a와 b의 합은 \(a+b)이다.") // => output : "a와 b의 합은 5이다." # 상수, 변수의 선언 # 상수 선언 키워드 : let => let 이름: 타입 = 값 ▪️(값의 타입이 명확한 경우, 타입 생략 가능 => let 이름 = 값) ▪️let은 constant (상수) 값이므로, 차후에 변경이 불.. 2023. 2. 24.
Ch7. Transforming Operators 본 게시물은 Florent Pillet, Junior Bontognali, Marin Todorov, Scott Gardner - RxSwift. Reactive Programming with Swift (2017, Razeware LLC) 책과 ReactiveX 사이트를 기반으로 작성되었습니다. RxSwift를 공부하는 데에 이 책을 읽으면 좋겠다고 생각하였고, 단지 읽기만 하는 것보다 한국어로 직접 정리해놓으면 더 기억하기 좋을 것 같아 게시물을 작성하게 되었습니다. 이번 게시물에서는 마블 다이어그램과, 마블 다이어그램에 해당하는 메서드 예시를 중점으로 정리하였습니다. 이번 게시물에서는 RxSwift에서 가장 중요한 연산자라고 할 수 있는 Transforming Operators 에 대해서 배워보겠습.. 2023. 2. 24.