분류 전체보기
-
Relay를 사용하면 무조건 메인스레드 일까개발/Swift 2023. 4. 2. 15:03
Relay나 Driver를 사용하면 에러나 complete이 없기때문에 UI 작업에 적합하다 알고있었기에 아무 거리낌없이 사용중이었다. var error: PublishRelay { get } 뷰 모델에서 에러가 발생하는경우 위 Relay에 에러를 accept 해서 뷰컨트롤러에 전달한다. 뷰컨트롤러는 해당 error 를 바인딩 하고 있다가 에러가 떨어지면 모달을 띄우는 역할을 하고있다. 네트워킹의 경우 background 스레드를 사용하고있다. 네트워킹에서 에러가 발생하는 경우 //Background Thread self.error.accept(error) 에러를 방출 시켜주었다. 이때 뷰컨트롤러에서 crash가 발생했다. modal을 띄우는것은 메인스레드를 쓰라는 것이다. viewModel.error ..
-
Rxswift 네트워크 에러 핸들링개발/Swift 2023. 4. 2. 15:00
public func checkSignUpID(loginID: String) -> Observable 위 함수는 네트워킹을 통해 Bool 타입을 Obseravle로 감싸 리턴해준다. 해당 타입은 true, false ,error 를 Obervable에 감싸 리턴한다. 요구 조건은 다음과 같다. 에러가 발생해도 VC의 구독이 끊기면 안된다. false와 error 모두 다른 핸들링이 필요하다. 일반적으로 사용하면 checkSignUpID() 에서 에러 발생시 구독이 끊긴다. 그러면 다시 요청했을때 아무런 이벤트가 발생 하지 않는다 구독이 끊기지 않게 하기 위해서 catch를 사용해 다시 Observable을 리턴해줘여한다. let subscribe = validSignUpID(loginID: loginID..
-
Rx + TableView(CollectionView) 바인딩 안되는 오류 해결방법개발/Swift 2023. 3. 21. 18:25
1. TableView에서 발생 (제약조건) dataSubject.bind(to: tableView.rx.items) { tableView, row, element in print("Test") return UITableViewCell() }.disposed(by: disposeBag) dataSubjecgt에 값을 아무리 집어 넣어도 위의 셀을 리턴하는 클로저가 호출이 계속안됨 tableView.register(IDIntergrationAuthCell.self, forCellReuseIdentifier: IDIntergrationAuthCell.id) tableView.rx.setDelegate(self).disposed(by: disposeBag) 레지스터와 delegate 모두 빠지지 않은 상태 (..
-
아주 짧은 방콕 7박8일 여행 후기후기 2023. 2. 22. 11:57
돈므앙 공항에 도착해 그랩 잡고(500바트 나옴) 호텔에 저녁 6시 도착 저녁에 뭐하지 하고 근처 걸어 다니다가 bts+ metro 타고 조드페어 야시장 감 도착하니 사람도 많고 혼자 먹을만한거도 많지 않아서 꼬치 하나 맥주 하나 먹고 돌아옴 그냥 자긴 아쉽고 제대로 놀기에는 쉬고싶고... 호텔주변 통로 근처 클럽 가볼까 하고 가봤는데 테라, 더티 개풀방 (11시 정도였음) 발디딜 틈이 없어서 호텔로 튀튀 다음날 아침 호텔 조식 200바트면 준다길래 먹음 가성비 좋았음 밥값이 치앙마이는 50~100바트라면 방콕은 100~200바트 느낌 통로 주변 마사지집 갔는데 아침 일찍이라 발마사지만 가능하다함 어쩔수 없지 그냥 해보자 하고 300바트 내고 받았는데 겁나 잘함 형님한테 받았는데 근막 뜯어주심. 가성비 ..
-
아주 짧은 치앙마이 4박 5일 여행 후기후기 2023. 2. 22. 11:12
오전 7시 치앙마이에 도착함 그랩타고 호텔로 오니 너무 일찍이라 체크인도 안되고 해서 근처에 님만쪽 걸어다님 오전 9시에 식당 여는데가 딱 하나 있어서 가서 무삥 하나 먹어봄 맛있었음 근처에 헬스장 하나 있길래 다녀오고 호텔 돌아가니 아직도 체크인 못한다 해서 점심 먹으로 카오쏘이 님만을감 맛있음 그런데 다른곳에 비해 조금 비싸고 앞옆뒤 테이블 한국인들이 많았음 호텔은 오키드 호텔이었는데 1박에 4만원이었나? 가성비 좋았음 침실이 엄청 컸음 나중에 방콕가서 작은 방쓰려니 적응 안됐었음 ㅠ 다 좋은데 문제는 님만을 걸어서 10분정도 가야해서 주변에 먹을게 많이 없었음 저녁에 오픈채팅 방 통해서 도이수텝 가는 동행 구해서 같이 치앙마이 대학교 근처에서 썽태우 타서 도이수텝 같이감 같이 탄 아줌마들 있었는데 ..
-
아주 짧은 라오스 방비엥 3박 4일 여행 후기후기 2023. 2. 22. 10:31
밤11시30분 넘어서 비엔티안 공항 도착함 공항에 가면 택시 서비스가 있음 거기가서 7달러 내고 택시타면 호텔까지 데려다줌 10달러 내면 3달러 잘 거슬러줌 밤에 도착하면 아무것도 안열음 그냥 잠 다음날 12시에 방비엥가는 벤을 예약함 블루투어에서 예약함 12시까지 할거없어서 숙소앞 은행에서 환전 하고 도가니 국수 하나먹고 다시 벤 대기. 이때 한 환전이 제일 좋았음 환전은 비엔티안에서 해야함 12시에 비엔티안에서 벤 출발하고 2시쯤 방비엥 도착함 이날 나나 게하에서 하루 묵었는데 서양인99동양인1 비율 양형들이랑 나중에 친해져야지 하고있는데 급 한국인 동행 구해져서 같이 안놀게 됨 ㅎㅎ 그냥 짐만두고 주변 밥집가서 밥먹고 블루투어가서 액티비티 예약함 집라인 카야킹 두개해서 26만낍 늦은오후라 딱히 할게..
-
[Swift] 직접 UITableView를 구현하기개발/Swift 2023. 1. 12. 17:04
스크롤 구현 방식 스크롤을 구현하기 위해 UIstackView를 통해 UI들을 집어넣고 UIPanGesture를 통해 터치이벤트를 받아 스크롤을 구현 했습니다. for i in 1.. UIImageView? { guard let image = UIImage(named: "image\\(index)") else {return nil} let imageView = UIImageView(image: image) imageView.translatesAutoresizingMaskIntoConstraints = false imageView.heightAnchor.constraint(equalToConstant: cellHeight).isActive = true return imageView } init에서 초기 1..
-
[Swift] 다양한 데이터 타입 동적으로 Decoding 하기개발/Swift 2023. 1. 9. 17:55
위 데이터 처럼 하나의 리스트에 다른 타입의 데이터를 받아오는 경우가 있다. 이때 해당 데이터를 디코딩할때 문제를 겪게된다. 해결 할수 있는 방법은 위와 같이 모든 프로퍼티들을 옵셔널하게 주는 방법이 있다. 그러면 디코딩 한 결과는 옵셔널 하며 데이터 혹은 nil 이 들어갈것이다. 이런 경우 문제점은 프로퍼티가 모두 옵셔널 하기 때문에 언래핑을 꼭 해줘야 한다는것이다. 더 좋은 방식은 해당 타입을 나누어 다른 타입으로 구현해내는 것이다. 어느 방식으로든 분기를 태워서 A타입, B타입으로 나누어 필요한 프로퍼티만 설정해주는것이다. enum CellItem: Decodable , Hashable{ case company(Company) case horizontal(Horizontal) case none en..