Swift
-
ReactorKit 에서 API 활용하기Swift/RxSwift 2022. 10. 15. 10:13
// 출처: https://nsios.tistory.com/141 (출처 코드를 일부 수정했습니다. ) 중요한 Code 1. Controller class APIPracticeController: UIViewController, View { var disposeBag = DisposeBag() func bind(reactor: MainReactor) { loadButton.rx.tap .map({ Reactor.Action.touchButton(index: 0) }) .bind(to: reactor.action) .disposed(by: disposeBag) reactor.state .map({$0.image}) .subscribe(onNext: {[weak self] img in guard let im..
-
XCode Workspace 내에 여러 Projects 만들기Swift/Tips & Tricks 2022. 10. 14. 22:31
XCode 로 코드를 다루다 보면 아래와 같은 구조가 필요할 때가 있다. 이렇게 구조를 짜놓으면, 1. 여러명이 작업하기도 편하고 2. 관련된 코드를 찾거나 3. 의존성도 필요한 곳에만 넣어주기 좋은 구조가 된다. 이제 어떻게 해당 구조를 만드는지 알아보자! 1. WorkSpace 만들기 CocoaPods 을 이용해서 만약 pod init 을 한 상태라면 WorkSpace 는 이미 만들어진 상태일 것이다. 그렇지 않은 경우라면, Xcode 상단 File -> New -> Workspace 를 눌러 추가해준다. MyWorkSpace 라고 이름을 지었다. 2. Projects 를 Workspace 내에 만들기 Workspace 를 만드는 과정과 유사하게, XCode 상단 File -> New -> Proje..
-
ReactorKit 으로 로그인 페이지 만들기Swift/RxSwift 2022. 10. 14. 01:58
Login Controller // // ViewController.swift // ReactorPractice // // Created by Mac mini on 2022/10/13. // import Foundation import UIKit import RxSwift import RxCocoa import Then import ReactorKit import RxViewController import RxGesture import SnapKit class ViewController: UIViewController, View { internal var disposeBag = DisposeBag() private let behaviorRelay = BehaviorRelay(value: ()) overr..
-
RxAlamofireSwift/RxSwift 2022. 10. 3. 00:01
https://github.com/RxSwiftCommunity/RxAlamofire 책을 뒤져보다가 우연히 RxAlamofire 를 발견했다. (RxCommunity 프로젝트들 중 하나.) Alamofire 는 iOS 진영에서 매우매우 많이 쓰는 API Request Framework 이다. RxAlamofire 를 이용해 쓸 수 있는 단순한 형태의 함수들은 아래와 같은 것들이 있다. // retrieve a request result as raw text RxAlamofire.string(method: HTTPMethod, url: URLConvertible) // decoded json 을 return 하기 때문에, .map 을 이용해서 Type 을 바꿔주거나, // 또는 subscription 내..
-
RxSwift Observable, Subjects and RelaysSwift/RxSwift 2022. 10. 1. 23:57
Subject Observable 이면서 observer 일 수 있음. (== 데이터를 방출 (emit), 구독 (subscribe) 할 수 있음. ) PublishSubject: empty 로 시작해서 subscribers 에게만 새로운 elements 를 emit BehaviorSubject: 초기값을 가짐. 초기 값 또는 가장 최근 element 를 new subscribers 에게 emit 해줌(replay) ReplaySubject: buffer size 만큼 초기화 되고, 해당 size 만큼의 element 를 지니고 있다가 new subscribers 에게 emit AsyncSubject: subject 가 complete event 를 받을 때만 가장 마지막 next event 값을 emi..
-
UITableView (with RxSwift)Swift/RxSwift 2022. 9. 30. 23:59
TableView 를 RxSwift 로 그리기! CollectionView 도 같은 방식으로 작동한다고 한다. (직접 해봐야 하지만.) 기존의 길고 긴 TableView boilier plate code 대신, cities.bind(to: tableView.rx.items) { (tableView: UITableView, index: Int, element: String) in let cell = UITableViewCell(style: .default, reuseIdentifier: "cell") cell.textLabel?.text = element return cell } 한 다섯줄의 간단한 코드로 기본적인 UITableView 를 만들 수 있다! 작동하는 기본적인 방식은, Observable 을 ..
-
Login Validation (simple..) RxSwift 구현Swift/RxSwift 2022. 9. 29. 23:25
오늘 구현해본 기능은 RxSwift 를 사용해서 기본적인 로그인 Validation. 위 아래 textField 는 각각 email, password 를 의미한다고 했을 때, 두 텍스트가 일정 조건을 맞춰주면 Login Button 이 빨간색으로 바뀌는 식으로 만들어주었다. 구현 방식은 BehaviorRelay 를 이용해서 각 TextField 의 값을 emailRelay, passwordRelay 에 넣어주고, combineLatest 를 이용해서 두 relay 값을 받은 후 특정조건을 넣는 식으로 구현하였다. // -------------- inside ViewController ---------------- // private let emailRelay = BehaviorRelay(value: ""..
-
RxSwift basic test (count 1씩 올리기)Swift/RxSwift 2022. 9. 28. 23:07
with RxSwift import UIKit import Then import RxSwift import RxCocoa class ViewController: UIViewController { private var count = BehaviorSubject(value: 0) private let bag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() setupBindings() setupLayout() } private func setupBindings() { btn.rx.tap .subscribe(onNext: { [weak self] _ in guard let self = self else { return } print("btn t..