본문 바로가기

ios34

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.
RxSwift. Traits가 뭘까? (Single, Maybe, Completable) RxSwift를 공부하던 중에 책에는 없는 내용인 Trait(Signle, Maybe, Completable)라는 게 있다는 것을 알게되었습니다. RxCocoa에도 Traits가 있지만 오늘은 일단 RxSwift의 Traits에 대해서 다뤄보려 합니다. What is Traits? Traits란 UI처리에 특화된 Observable이라고 할 수 있습니다. Traits는 직관적이고 작성하기 쉬운 코드를 작성하는데 도움이 되는 Observable로, 인터페이스 간 Observable이 소통하는 것을 도와주고 raw observable에 비해 문맥상 의미를 전달하거나 특정 용도로 사용하기에 좋습니다. 따라서 필수가 아닌 선택적으로 사용됩니다. Single 1개의 element를 포함하는 Observable S.. 2023. 2. 24.
[SwiftUI] 양방향 바인딩 (작성중) 이번 게시물에서는 SwiftUI의 양방향 바인딩에 대해 알아보겠습니다. SwiftUI에서 양방향 바인딩이 중요한 이유는 ContentView가 struct로 이루어져 있기 때문입니다. 그럼 예시를 보면서 천천히 살펴볼까요? 텍스트 입력받기 텍스트를 입력받고, 입력받은 텍스트를 보여주는 예시를 구현해볼게요! 위와 같은 코드를 작성하고 나면 아래와 같은 화면을 볼 수 있습니다. 그리고 저 TextField에 텍스트를 입력하면??? TextField 아래에 있는 Text에도 입력한 글자가 나타나게 되죠! 코드를 보면 TextField에서 입력되는 텍스트를 $email을 통해 email 변수에 넣어주게 되고, Text에서는 그 email 변수를 보여주도록 되어 있죠. 그리고 email 변수에는 @State 가 .. 2023. 2. 24.
[SwiftUI] 시작하기 네 저도 이제 SwiftUI를 공부해보려 합니다.. iOS 공부를 시작한지 7개월차가 되었고, 그동안 SwiftUI보다는 기초적인 부분에 신경쓰려고 했었어요. Storyboard를 활용해본다던가, xib를 활용해본다던가, ConstraintsLayout을 사용해서 코드로 뷰를 구성해본다던가, SnapKit을 사용해본다던가... 그리고 이제 SwiftUI를 슬슬 시작해보기로 마음 먹었습니다 :) SwiftUI SwiftUI는 재작년 2019 WWDC에서 발표된 것으로, iOS 13.0 이상부터 사용 가능합니다. 그리고 이 SwiftUI를 사용해서 워치나 위젯을 구현할 수 있게 되었죠! SwiftUI는 선언적 구문을 사용하기 때문에 사용자 인터페이스의 기능을 명시하기만 하면 되어, 간단한 코드로 Swift의.. 2023. 2. 24.