SWIFT 18

[RxSwift] Operator - Filter

안녕하세요! 오늘은 RxSwift의 Operator중 Filter에 대해 적어두려고 해요 :) 테스트 조건을 만족하는 항목들만 배출해요. 조건식이 10보다 큰 수 였으니 6개의 정수중에 30, 22, 60만 배출되었어요. 예시) let disposeBag = DisposeBag() let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Observable.from(numbers) .filter { $0.isMultiple(of: 2) } .subscribe { print($0) } .disposed(by: disposeBag) /* 실행결과 next(2) next(4) next(6) next(8) next(10) completed */

iOS/RxSwift 2022.12.16

[Swift] guard와 if-let 비교해보기

안녕하세요! 오늘은 guard문과 if문의 차이를 비교정리해보겠습니다 :0 1. guard문 guard 문은 뭔가를 검사하여 그 다음에 오는 코드들을 실행할지 말지 결정, guard 문에 주어진 조건문이 거짓일 때, 여기에 달려있는 코드 블럭이 실행된다. 조건식에 이 함수가 수행하는데 필요한 조건을 그대로 나타낸다는 점에서 if문에서 부정적인 조건식으로 표현하는 것보다 가독성이 높은 장점. if 문과 다르게, else를 항상 달아야 한다. func guardFunc (be: String?) { guard be != nil else { return } print(be) } guardFunc(be: "20") guardFunc(be: nil) 옵셔널 바인딩은 if-let 문법을 사용한 옵셔널 바인딩과 다르게..

iOS/Swift 2022.12.07

[RxSwift] Why RxSwift?

안녕하세요 . 오늘은 RxSwift의 장단점에 대해 적어두려고 해요! ReactiveX는 관찰 가능한 시퀀스를 사용하여 비동기식 및 이벤트 기반 프로그램을 구성하기 위한 라이브러리 입니다. 장점 1. 반응형 패러다임이 제공하는 명확함 비동기를 동기화 된 것인양 작성할 수 있음 2. 일관성이 없는 비동기 코드를 해결 어떤 곳에서는 DispatchQueue, 어떤 곳에서는 OperationQueue… 하나의 비동기 코드로 개발이 가능함 3. 확장 불가능한 아키텍처 패턴을 해결 일관성 없는 비동기 코드를 작성하게 되어 서로 다르게 구현한 로직을 조합하거나 확장하기에 어려운 부분을 해결 Rx로 일관된 코드를 작성하면서 아키텍처의 확장이 가능함 4.콜백지옥에서 탈출 5. Thread 처리가 용이 MainThrea..

iOS/RxSwift 2022.12.05

[Swift] 속성 감시자 (Property Observer)

오늘은 속성 감시자에 대해 정리하려고 합니다. 속성 감시자는 저장 속성이 변하는 시점을 관찰합니다. 저장 속성이 변하는 순간, 구현되어 있는 메서드가 호출됩니다. 1) willSet은 값이 저장되기 직전에 호출됩니다. 2) didSet은 새 값이 저장된 직후에 호출됩니다. class Apple { // 일반 저장 속성 var message: String = "가격이 변경 되었습니다." // 속성 감시자 var price: Int { willSet(price) { // 바뀔 값이 파라미터로 전달 print("사과의 가격이 \(self.price)원에서 \(price)원으로 변경될 예정입니다.") print("가격 변경전") } didSet(price) { // 바뀌기 전의 과거값이 파라미터로 전달 prin..

iOS/Swift 2022.11.25

[Swift] 서브스크립트 (Subscripts)

오늘은 서브스크립트에 대해 정리해볼게요! 서브스크립트란? -> 대괄호를 이용해서 접근가능하도록 만든 문법 Ex) -> 배열 array[index] -> 딕셔너리 dictionary[key] var array = ["banana", "apple", "tomato"] array[0] // banana array[1] // apple // 내부적으로 대괄호를 사용하면 어떤 값을 리턴하도록 구현이 되어 있어서 가능한 일 직접 구현해보기 class SportsData { var datas = ["soccer", "baseball", "basketball", "tennis"] subscript(index: Int) -> String { get { return datas[index] } set { datas[inde..

iOS/Swift 2022.11.25

[Swift] 클래스와 구조체 (Class, Struct)

오늘은 클래스와 구조체를 정리해보겠습니다 :) 구조체(struct) vs 클래스(class) 타입 -> Value Type (값 형식) vs Reference Type (참조 형식) 메모리 -> 값의 저장: Stack / 복사 전달 (메모리에서 자동제거) vs Heap / 주소 전달 (ARC로 관리) 선언 -> 인스턴스 상수(let)로 선언시, 저장속성이 전부 상수로 선언 vs 인스턴스 상수(let)로 선언하면 가르키는 인스턴스 고정 (저장 속성은 각 let/var 선언에 따름) 소멸자 -> 소멸자 없음 vs 소멸자 있음 상속여부 -> 상속 불가능 vs 상속 가능 값 형식(struct) vs 참조 형식(class) 타입 -> Value Type vs Reference Type 메모리 상의 저장 위치 ->..

iOS/Swift 2022.11.22

[Swift] Optional

Optional? 안전한 코드를 작성하기 위해 사용하는 문법 nil -> 값이 없음을 표현하는 키워드 String = 값이 없으면 에러 String? = 에러가 나지 않도록 임시적인 타입을 담아둠 let str: String = "Swift" let optionalStr: String? = nil let a: Int? = nil let b: Int? = a //nil b // nil 옵셔널 타입 추출 방법 1. 강제 추출 - nil이 아닌 값이 있다는 것을 확신하고 강제로 값을 추출 (값이 없는 경우 크래시 위험) let value: String? = "val" value! // val let value2: String? value2! = 에러 2. nil 확인후, 강제 추출 if value != nil..

iOS/Swift 2022.11.17

[Swift] Array

오늘은 Array(배열)에 대해 정리해봤어요. - 간단한 특징 Ordered Collection (저장된 순서대로 저장) Single Type (배열안의 자료형은 동일해야함) 중복 가능, 같은 값이라 해도 개별요소로 처리 0-based Index // 배열의 요소를 찾을 때 사용 Array ? [elem, elem, ....] let nums =[1, 2, 3] Array // 정식 문법 [T] // 단축 문법 let strArray: Array let strArray2: [String] Array - Creating an Array let nums = [1, 2, 3] let emptyArray: [Int] = [] // 빈 리터럴을 사용할땐 형식 지정해줘야함 let emptyArray2 = Array..

iOS/Swift 2022.11.16

[Swift] 타입캐스팅 (Type Casting)

Type Casting(형 변환) 1. 스위프트의 타입캐스팅은 인스턴스의 타입을 확인하는 용도 2. 클래스의 인스턴스를 부모 혹은 자식 클래스의 타입으로 사용할 수 있는지 확인하는 용도 3. is, as 사용 Downcasting 다운캐스팅은 실패할 수 있기 때문에, 타입 캐스트 연산자는 두가지 형태로 제공됩니다. 조건부 형식인 ?은 다운캐스팅 하려는 타입의 Optional 값을 반환합니다. 강제 형식인 !은 강제 언래핑을 하여 값을 반환합니다. ​ 그러니, 다운캐스팅이 항상 성공할 것이라는 확신이 들때만 강제형식인 !를 사용하세요. 이 형식은 잘못된 클래스 타입으로 다운캐스트 하려고 하면, 런타임 에러를 발생시킵니다. ​ 예시 for item in library { if let movie = item ..

iOS/Swift 2022.11.15