본문 바로가기

iOS 프로그래밍

(24)
Reactive 문서보는 법(rxswift 와 mvvm 도전기2) 이렇게 많은 language들을 지원하는 ReactiveX를 사용하시는 분이 많을 텐데요 저는 공부를 할때 공식 사이트의 문서를 활용하는 것을 좋아하는데 이 문서를 쉽게 볼 수 있게 되어 있어 ReactiveX가 더욱 맘에 들었습니다. ​ 공식사이트 에서문서 보는 방법을 알려드리고 함께 공부하면 좋겠다는 마음에서 포스팅을 하게 되었습니다. http://reactivex.io/ 위의 문서는 Observable 링크에 들어간것인데요 여기서 문서는 위의 그림으로 알 수 있고, 이 그림을 '마블 다이어그램' 이라고 하는 것을 알 수 있습니다. 다음은 Operator에 들어가볼까요? 그 후 스크롤을 아래로 쭉쭉 내려주세요!! 그러다 보면 아래와 같은 화면을 보실 수 있는데요 볼드체와 그렇지 않은 것들로 섞여 있는..
rxswift 와 mvvm 도전기1 대부분의 사람들이 mvvm 아키텍처를 사용하려고 할때 많은 이유가 있을 것 같습니다. 대다수의 사람들은 자신의 어플을 유지보수 하기 쉽도록 하기 위해서 일것 입니다. 저 또한 mvvm의 유용성에 대해 알게 되었고 도전하게 되었습니다. ​ RxSwift란? 그리고 MVVM이란? 처음 RxSwift와 mvvm에 대해 배우려 할때는 정확히 어떤 것이고 어떤 특성이 있는지 알아야 겠지요? ​ "RxSwift" RxSwift 는 rx + swift로 ReactiveX와 swift의 합성어 입니다. ReactiveX를 처음 들어보신 분들이라면 아직 이해가 잘 가지 않으시죠? 라고 위키 백과에서 나오는데요 동기 비동기의 개념은 전공자들이라면 아실 것이라 생각하고 넘어가겠습니다. ​ ReactiveX는 관찰 가능한 시..
[swift] 문법정리6 (옵셔널 체이닝) 옵셔널 체인 - 옵셔널 체인으로 클래스나 구조체의 속성을 참조할 경우 클래스의 값이 nil이어도 오류가 발생하지 않는다 - 옵셔널 체인으로 읽어낸 마지막 값이 일반 타입이라도 모두 옵셔널 타입으로 리턴된다 - 옵셔널 타입으로 정의된 값이 자식 프로퍼티나 메서드를 가지고 있을 때, 다중 if를 쓰지 않고 간결하게 코드를 작성하기 위해 쓰인다 - 옵셔널 타입의 데이터는 연산이 불가능하다. 하지만 연산을 해야한다면 옵셔널 타입의 데이터를 다시 한번 옵셔널 타입으로 변경하면서 해제를 시킬 수 있다. class Person { var name : String? var age : Int? var sns : SNS? = SNS() } class SNS { var fb : FaceBook? = FaceBook() va..
[swift] 문법정리5 (배열, 딕셔너리,클래스와 구조체 열거형 비교) 스위프트 배열 초기화 - 배열은 동일한 타입의 값이지만 여러 타입이 혼합된 배열도 가능하다 - 배열의 타입은 타입 어노테이션(type annotation)을 사용하여 구체적으로 지정할 수도 있고, 타입 유추(type inference)를 이용하여 컴파일러가 식별하도록 할 수도 있다. ● 가변형 문자열 배열 var treeArray = ["Pine", "Oak", "Yew"] var treeArray : [String] = ["Pine", "Oak", "Yew"] ● 불변형 문자열 배열 let treeArray1 = ["Pine", "Oak", "Yew"] - 배열은 생성 시에 값을 할당할 필요는 없다. var 변수 이름 = [타입]() var nameArray = [String](repeating: "S..
[swift] 문법정리4 (클래스, 상속, 익스텐션) 객체지향 용어 비교 ​ 스위프트 클래스 선언하기 class 새로운 클래스 이름: 부모 클래스 { // 속성(프로퍼티) // 인스턴스 메서드 // 타입(type) 메서드(클래스 메서드) } - "속성" 부분은 클래스 내에 포함되는 변수(var)와 상수(let)를 정의 한다. - "인스턴스 메서드"는 객체가 호출하는 메소드를 정의한다. - "타입 메서드" 는 클래스가 호출하는 메서드를 정의한다. ​ 인스턴스 선언하고 초기화하기, 해제하기 - 위의 클래스를 가지고 어떠한 일을 하기 위해서는 클래스의 인스턴스를 만드어야 한다. - 가장 먼저 할 일은 인스턴스가 만들어졌을 때 이 인스턴스의 참조체를 저장할 변수를 선언하는 것 · var 인스턴스명: 클래스명 = 클래스명() · var 변수명: 자료형 = 초깃값 -..
[swift] 문법정리3 ( 함수와 메서드, 클로저) 함수 함수 정의부의 값을 매개변수 , 호출시의 값은 인수라고 부름 ​ 메서드 특정 클래스나 구조체, 또는 열거형과 관련된 함수 ​ 스위프트 함수를 선언하는 방법 - 매개변수를 받지 않으며 결과를 반환하지도 않고 오직 메시지만 출력 ex) func sayHello() { //리턴값 없으면(Void) 지정하지 않아도 됨 print("Hello") } - 하나의 문자열과 하나의 정수를 매개변수로 받아서 문자열을 반환 func buildMessage(name: String, count: Int) -> String { return("\(name), you are customer number \(count)") } C언어에서 swift 함수 변경하기 c언어 int add(int x, int y) { //C, C++..
[swift] 문법 정리2 형 변환(as! as?로 downcasting) - 부모인스턴스 as! 자식클래스 // downcasting 일반 타입으로 반환. // 다운캐스팅이 반드시 성공할 것이라는 확신이 있을 때 - 부모인스턴스 as? 자식클래스 // downcasting 옵셔널 타입으로 반환. 오류 가능성 있을 경우 - 성공 확신이 있으면 as! 키워드를 사용하며 강제 변환(forced conversion) *변환이 안되면 crash - 성공 확신이 없으면 as?를 사용하여 안전하게 변환 * 변환이 안되면 nil을 리턴하므로 옵셔널 타입으로 반환함 - 다운캐스팅은 어떤 클래스에서 다른 클래스로 변환할 때 안전한 변환을 보장할 수 없으며, 컴파일러가 유효하지 않은 변환 시도를 잡아낼 수도 있음 - 다운캐스팅에서 유효하지 않은 형..
[swift] 문법 정리1 let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4] //dictionary는 key:value형식의 배열 for (animalName, legCount) in numberOfLegs { print("\(animalName)s have \(legCount) legs") } //숫자를 저장 var mynumber : Int = 10 위와 같이 초깃값이 있을 경우에는 컴파일러가 타입 추론을 하므로 데이터 타입을 명시할 필요 없음 스위프트 변수 : var - 변경 가능 스위프트 상수 : let -변경 불가능(코드 내에서 반복적으로 사용되는 값이 있을 경우에 유용) -> 애플은 코드의 효율성과 실행 성능을 높이기 위해서 변수보다는 상수를 사용하라고 권장 ​ 타입 어노테이..