Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat [#31] 회원가입_프로필 UI 구현 #32

Merged
merged 9 commits into from
Jan 11, 2024
18 changes: 17 additions & 1 deletion DontBe-iOS/DontBe-iOS.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,16 @@
2A2671FF2B4C3AF0009D214F /* Publisher+UIControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2671FE2B4C3AF0009D214F /* Publisher+UIControl.swift */; };
2A2672022B4C3B44009D214F /* ViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2672012B4C3B44009D214F /* ViewModelType.swift */; };
2A2672052B4C3C00009D214F /* CancelBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A2672042B4C3C00009D214F /* CancelBag.swift */; };
2A31FF572B4F1E0400FEEED9 /* String+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A31FF562B4F1E0400FEEED9 /* String+.swift */; };
2A31FF592B4F3A8B00FEEED9 /* UserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A31FF582B4F3A8B00FEEED9 /* UserInfo.swift */; };
2A51AE852B4B05AA00FF770A /* SplashViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A51AE842B4B05AA00FF770A /* SplashViewController.swift */; };
2A6D54C12B479B4300F9891E /* adjusted+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A6D54C02B479B4300F9891E /* adjusted+.swift */; };
2A6D54C32B493A8400F9891E /* UIFont+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A6D54C22B493A8400F9891E /* UIFont+.swift */; };
2A6D54C62B493E3F00F9891E /* Pretendard-SemiBold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2A6D54C42B493E3F00F9891E /* Pretendard-SemiBold.otf */; };
2A6D54C72B493E3F00F9891E /* Pretendard-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 2A6D54C52B493E3F00F9891E /* Pretendard-Regular.otf */; };
2A84465A2B4EE8B400F98F2A /* JoinProfileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A8446592B4EE8B400F98F2A /* JoinProfileViewController.swift */; };
2A84465C2B4EEC6C00F98F2A /* JoinProfileViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A84465B2B4EEC6C00F98F2A /* JoinProfileViewModel.swift */; };
2A84465E2B4EF41900F98F2A /* JoinProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A84465D2B4EF41900F98F2A /* JoinProfileView.swift */; };
2A8D70B12B4C4D8F009F4C6C /* KakaoSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 2A8D70B02B4C4D8F009F4C6C /* KakaoSDK */; };
2A8D70B42B4C999F009F4C6C /* CustomButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A8D70B32B4C999F009F4C6C /* CustomButton.swift */; };
2A8D70B82B4C9A59009F4C6C /* OnboardingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A8D70B72B4C9A59009F4C6C /* OnboardingViewController.swift */; };
Expand Down Expand Up @@ -74,12 +78,16 @@
2A2672012B4C3B44009D214F /* ViewModelType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewModelType.swift; sourceTree = "<group>"; };
2A2672042B4C3C00009D214F /* CancelBag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CancelBag.swift; sourceTree = "<group>"; };
2A26720D2B4C40CE009D214F /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = "<group>"; };
2A31FF562B4F1E0400FEEED9 /* String+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+.swift"; sourceTree = "<group>"; };
2A31FF582B4F3A8B00FEEED9 /* UserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfo.swift; sourceTree = "<group>"; };
2A51AE842B4B05AA00FF770A /* SplashViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SplashViewController.swift; sourceTree = "<group>"; };
2A6D54C02B479B4300F9891E /* adjusted+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "adjusted+.swift"; sourceTree = "<group>"; };
2A6D54C22B493A8400F9891E /* UIFont+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+.swift"; sourceTree = "<group>"; };
2A6D54C42B493E3F00F9891E /* Pretendard-SemiBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Pretendard-SemiBold.otf"; sourceTree = "<group>"; };
2A6D54C52B493E3F00F9891E /* Pretendard-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Pretendard-Regular.otf"; sourceTree = "<group>"; };
2A8446592B4EE8B400F98F2A /* JoinProfileViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinProfileViewController.swift; sourceTree = "<group>"; };
2A84465B2B4EEC6C00F98F2A /* JoinProfileViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinProfileViewModel.swift; sourceTree = "<group>"; };
2A84465D2B4EF41900F98F2A /* JoinProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinProfileView.swift; sourceTree = "<group>"; };
2A8D70B32B4C999F009F4C6C /* CustomButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomButton.swift; sourceTree = "<group>"; };
2A8D70B72B4C9A59009F4C6C /* OnboardingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewController.swift; sourceTree = "<group>"; };
2A8D70BC2B4D61A1009F4C6C /* OnboardingDummy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingDummy.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -248,6 +256,7 @@
isa = PBXGroup;
children = (
2A8D70D22B4DD360009F4C6C /* JoinAgreeViewModel.swift */,
2A84465B2B4EEC6C00F98F2A /* JoinProfileViewModel.swift */,
);
path = ViewModels;
sourceTree = "<group>";
Expand All @@ -266,6 +275,7 @@
children = (
2AC9FB1A2B4DE77400D31071 /* AgreementListCustomView.swift */,
2AC9FB1E2B4E634A00D31071 /* JoinAgreeView.swift */,
2A84465D2B4EF41900F98F2A /* JoinProfileView.swift */,
);
path = Views;
sourceTree = "<group>";
Expand Down Expand Up @@ -366,6 +376,7 @@
2A2671FE2B4C3AF0009D214F /* Publisher+UIControl.swift */,
2A8D70C42B4D8079009F4C6C /* UIViewController+.swift */,
2A8D70CB2B4DA7BD009F4C6C /* UITextField+.swift */,
2A31FF562B4F1E0400FEEED9 /* String+.swift */,
);
path = Extension;
sourceTree = "<group>";
Expand Down Expand Up @@ -488,6 +499,7 @@
2A2672042B4C3C00009D214F /* CancelBag.swift */,
2A8D70C22B4D7FF5009F4C6C /* BackButton.swift */,
2A8D70B32B4C999F009F4C6C /* CustomButton.swift */,
2A31FF582B4F3A8B00FEEED9 /* UserInfo.swift */,
);
path = Helpers;
sourceTree = "<group>";
Expand Down Expand Up @@ -573,7 +585,7 @@
files = (
2A8D70CA2B4D9787009F4C6C /* IntroductionView.swift in Sources */,
2F87354A2B4C427000E55552 /* UICollectionViewRegisterable.swift in Sources */,
2A8D70CA2B4D9787009F4C6C /* OnboardingEndingView.swift in Sources */,
2A8D70CA2B4D9787009F4C6C /* IntroductionView.swift in Sources */,
3C6193172B3A7A7B00220CEB /* UIStackView+.swift in Sources */,
3CE9C12E2B4C08AE0086E4A3 /* WriteTextView.swift in Sources */,
2A8D70BD2B4D61A1009F4C6C /* OnboardingDummy.swift in Sources */,
Expand Down Expand Up @@ -604,14 +616,18 @@
2F87354C2B4D28D700E55552 /* HomeCollectionFooterView.swift in Sources */,
2F8735482B4C355100E55552 /* HomeCollectionViewCell.swift in Sources */,
3CE9C12A2B4BE6780086E4A3 /* WriteViewController.swift in Sources */,
2A84465C2B4EEC6C00F98F2A /* JoinProfileViewModel.swift in Sources */,
3C2854FD2B3A9FD800369C99 /* ExampleViewController.swift in Sources */,
2AAEFC992B4A9E3B00C2D323 /* DontBeTabBarController.swift in Sources */,
2A31FF592B4F3A8B00FEEED9 /* UserInfo.swift in Sources */,
2AAEFC972B4A9C3700C2D323 /* DontBeTabBarItem.swift in Sources */,
3C0920DE2B4D98CD003BD080 /* DontBeToastView.swift in Sources */,
3CE9C1302B4C2F740086E4A3 /* UIImageView+.swift in Sources */,
2A51AE852B4B05AA00FF770A /* SplashViewController.swift in Sources */,
2A84465E2B4EF41900F98F2A /* JoinProfileView.swift in Sources */,
3CE9C1322B4C3C2D0086E4A3 /* UITextView+.swift in Sources */,
2A8D70BF2B4D68E3009F4C6C /* OnboardingEndingViewController.swift in Sources */,
2A31FF572B4F1E0400FEEED9 /* String+.swift in Sources */,
2A51AE852B4B05AA00FF770A /* SplashViewController.swift in Sources */,
2A8D70C32B4D7FF5009F4C6C /* BackButton.swift in Sources */,
2A8D70D32B4DD360009F4C6C /* JoinAgreeViewModel.swift in Sources */,

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As an AI language model, I don't have real-time information or the ability to predict the future beyond my last update in September 2021. Therefore, I cannot provide specific information about the events of 2023 or 2024. Please refer to reliable news sources or other up-to-date references for the latest information.

Expand Down
17 changes: 17 additions & 0 deletions DontBe-iOS/DontBe-iOS/Global/Extension/String+.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//
// String+.swift
// DontBe-iOS
//
// Created by 변희주 on 1/11/24.
//

extension String {
// 글자가 자음인지 체크
var isConsonant: Bool {
guard let scalar = UnicodeScalar(self)?.value else {
return false
}
let consonantScalarRange: ClosedRange<UInt32> = 12593...12622
return consonantScalarRange ~= scalar
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 리뷰:

  1. 코드의 목적이나 기능 설명이 없습니다. 주석을 통해 코드의 목적과 역할을 명확하게 설명하는 것이 좋습니다.
  2. String+.swift 파일의 이름에서 알 수 있듯이, 해당 코드는 String 타입에 대한 확장(extension)입니다.
  3. isConsonant 프로퍼티를 추가하여 입력된 문자열이 자음인지 여부를 판단하는 기능을 제공합니다.
  4. 문자열을 유니코드 스칼라로 변환하여 값이 존재하면 해당 스칼라가 일정 범위 내에 있는지 확인합니다.
  5. consonantScalarRange 상수는 자음 스칼라 값(한글 자음의 유니코드 값 범위)을 나타내며, 해당 범위 안에 스칼라 값이 존재하는지 체크합니다.
  6. 가독성과 명확성을 위해서, 변수나 함수에 설명적인 이름을 사용하는 것이 좋습니다.

버그 위험점:

  1. guard 문에서 문자열을 유니코드 스칼라로 변환할 때, 옵셔널 값이 아닌 UnicodeScalar(self)로 직접 변환하는데, 이때 self가 빈 문자열일 경우 nil이 반환되고 guard 조건문을 통과하게 됩니다. 빈 문자열에 대한 처리를 추가하는 것이 좋습니다.

개선 제안:

  1. 주석을 추가하여 코드의 목적과 역할을 명확하게 설명합니다.
  2. consonantScalarRange 상수를 표현적인 이름으로 변경하면 가독성이 개선됩니다.
  3. 반환 타입인 Bool 대신에 isConsonant의 로직이 복잡해지거나 다른 타입으로 확장될 가능성이 있는 경우, 구조체(ConsonantChecker 등)로 추상화하여 좀 더 유연한 구조를 만들 수 있습니다.
  4. 옵셔널 바인딩(optional binding)을 사용하여 self가 빈 문자열인 경우 조건문에서 거부되도록 변경합니다.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 코드 패치에는 크게 문제가 없어 보입니다. 다만 개선을 위해 몇 가지 제안 사항이 있습니다:

  1. 주석: 코드 파일의 상단에 있는 주석은 좋은 접근 방식입니다. 그러나 주석에 한글로 작성하는 대신 영문으로 작성할 것을 권장합니다. 이렇게 하면 코드를 이해하거나 협업하는 데 도움이 될 수 있습니다.

  2. 변수/상수명: 변수 및 상수명은 식별적이고 의미 있는 이름으로 사용하는 것이 좋습니다. 예를 들어, isConsonant 대신 hasConsonantcontainsConsonant와 같은 이름을 사용하여 함수의 목적을 더 잘 설명할 수 있습니다.

  3. 예외 처리: guard 문에서 optional 값을 unwrapping 할 때, 문자열이 비어있을 경우에 대한 처리가 필요합니다. 현재 코드에서는 빈 문자열인 경우 UnicodeScalar(self) 호출 시 에러가 발생합니다. 이에 대한 처리를 추가하면 더욱 안전한 코드가 될 수 있습니다.

  4. 범위 연산자: 비교 연산자(~=)를 사용하여 문자 값이 자음 범위에 속하는지 확인하는 것은 좋은 접근 방식입니다. 다만, 코드에서 사용된 범위(12593...12622)에 대해서 주석으로 설명을 추가하는 것이 좋습니다. 자음의 범위가 무엇을 의미하는지 알려주는 것이 기능 확장성과 코드 유지 보수를 위해 도움이 될 수 있습니다.

  5. 단위 테스트: 코드의 품질을 높이기 위해 해당 함수에 대한 단위 테스트를 작성하는 것이 좋습니다. 유효한 문자열과 유효하지 않은 문자열에 대해 테스트를 수행하여 코드가 예상대로 작동하는지 확인할 수 있습니다.

이런 면들을 고려하여 코드를 개선하고 안전성을 확보할 수 있을 것입니다.

3 changes: 2 additions & 1 deletion DontBe-iOS/DontBe-iOS/Global/Literals/ImageLiterals.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ enum ImageLiterals {
enum Common {
static var btnBack: UIImage { .load(name: "btn_back") }
static var logoSymbol: UIImage { .load(name: "logo_symbol") }
static var imgProfile: UIImage { .load(name: "img_profile") }
}

enum TabBar {
Expand All @@ -36,7 +37,6 @@ enum ImageLiterals {
static var imgTwoTitle: UIImage { .load(name: "title_second") }
static var imgThirdTitle: UIImage { .load(name: "title_third") }
static var imgFourthTitle: UIImage { .load(name: "title_fourth") }
static var imgProfile: UIImage { .load(name: "img_profile") }
}

enum Login {
Expand All @@ -52,6 +52,7 @@ enum ImageLiterals {
static var btnNecessary: UIImage { .load(name: "btn_necessary") }
static var btnSelect: UIImage { .load(name: "btn_select") }
static var btnView: UIImage { .load(name: "btn_view") }
static var btnPlus: UIImage { .load(name: "btn_plus") }
}

enum Home {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 코드 패치는 이미지 리터럴을 정의하는 열거형에 변경 사항을 추가합니다.

변경 사항:

  1. Common 열거형에 imgProfile 이미지 리터럴이 추가되었습니다.
  2. TabBar 열거형에서 imgProfile 이미지 리터럴을 제거하였습니다.
  3. Login 열거형에 btnPlus 이미지 리터럴이 추가되었습니다.

버그 위험사항:
본 코드 패치에서는 특정한 버그 위험이나 오류를 발견하지 못했습니다.

개선 제안:

  1. 이미지 리터럴 이름을 좀 더 명확하게 나타낼 수 있는 방법과 일관성을 유지하는 것을 고려해 볼 수 있습니다.
  2. 이미지 파일의 이름을 일관된 형식으로 관리하여 코드에서 사용하는 이름과 일치시킵니다.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "btn_plus.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "btn_plus@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "btn_plus@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 코드 패치는 JSON 포맷으로 작성된 이미지 정보를 포함하고 있습니다. 이미지 파일 이름과 해당 이미지의 idiomatic 속성(일반적인 사용법), scale 속성(해상도 배율) 등의 정보가 포함되어 있습니다. 버전 및 작성자 정보도 포함되어 있습니다.

이 코드 패치에 대한 개선 제안은 다음과 같습니다:

  1. 주석 추가: 각 항목의 역할, 의도 및 사용 예 등을 설명하는 주석을 추가하는 것이 좋습니다.
  2. 유효성 검사: 입력된 이미지 파일 이름, idiomatic 값 및 scale 값이 유효한지 확인하는 추가적인 유효성 검사를 수행하는 것이 바람직합니다.
  3. 확장성 고려: 현재 코드는 세 가지 이미지만 포함하고 있으며, 더 많은 이미지를 지원해야 할 경우 유연성이 부족할 수 있습니다. 이에 대비하여 배열을 사용하여 다양한 이미지를 나타낼 수 있는 구조로 변경하는 것이 좋습니다.

위의 제안사항을 고려하여 코드를 개선할 수 있습니다.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 12 additions & 0 deletions DontBe-iOS/DontBe-iOS/Presentation/Helpers/UserInfo.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//
// UserInfo.swift
// DontBe-iOS
//
// Created by 변희주 on 1/11/24.
//

import Foundation

struct UserInfo {
let userNickname: String
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 코드 패치에서는 UserInfo라는 구조체가 정의되어 있습니다. 이 구조체는 userNickname이라는 속성을 가지고 있습니다.

버그 위험은 보이지 않으며, 코드 리뷰나 개선 제안은 다음과 같습니다:

  1. 파일 상단에 작성자와 작성일을 주석으로 추가하여 코드의 출처와 업데이트된 날짜를 명시적으로 표기할 수 있습니다.
  2. 주석 아래의 빈 줄들은 삭제하면 코드의 가독성이 향상됩니다.

개선된 코드:

//
//  UserInfo.swift
//  DontBe-iOS
//
//  Created by 변희주 on 2024/01/11.
//

import Foundation

struct UserInfo {
    let userNickname: String
}

※ 제 답변은 일반적인 개발 지침에 기반하여 작성된 것입니다. 특정 프로젝트의 요구사항과 코딩 스타일 가이드라인에 따라 조금 다를 수도 있습니다.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//
// Created by 변희주 on 1/10/24.
//

import Combine
import UIKit

import SnapKit
Expand All @@ -16,17 +16,18 @@ final class JoinAgreementViewController: UIViewController {
private var cancelBag = CancelBag()
private let viewModel: JoinAgreeViewModel

private lazy var backButtonTapped = navigationBackButton.publisher(for: .touchUpInside).map { _ in }.eraseToAnyPublisher()
private lazy var backButtonTapped = self.navigationBackButton.publisher(for: .touchUpInside).map { _ in }.eraseToAnyPublisher()
private lazy var allCheckButtonTapped = self.originView.allCheck.checkButton.publisher(for: .touchUpInside).map { _ in }.eraseToAnyPublisher()
private lazy var firstCheck = self.originView.firstCheckView.checkButton.publisher(for: .touchUpInside).map { _ in }.eraseToAnyPublisher()
private lazy var secondCheck = self.originView.secondCheckView.checkButton.publisher(for: .touchUpInside).map { _ in }.eraseToAnyPublisher()
private lazy var thirdCheck = self.originView.thirdCheckView.checkButton.publisher(for: .touchUpInside).map { _ in }.eraseToAnyPublisher()
private lazy var fourtchCheck = self.originView.fourthCheckView.checkButton.publisher(for: .touchUpInside).map { _ in }.eraseToAnyPublisher()
private lazy var nextButtonTapped = self.originView.nextActiveButton.publisher(for: .touchUpInside).map { _ in }.eraseToAnyPublisher()


// MARK: - UI Components

private let navigationBackButton = BackButton()
private var navigationBackButton = BackButton()
private let originView = JoinAgreeView()

// MARK: - Life Cycles
Expand All @@ -51,16 +52,16 @@ final class JoinAgreementViewController: UIViewController {
super.viewDidLoad()

setUI()
setHierarchy()
setLayout()
bindViewModel()
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

self.navigationController?.navigationBar.isHidden = false
self.navigationItem.hidesBackButton = true
setHierarchy()
setLayout()
}
}

Expand All @@ -74,7 +75,6 @@ extension JoinAgreementViewController {

private func setHierarchy() {
self.navigationController?.navigationBar.addSubviews(navigationBackButton)

}

private func setLayout() {
Expand All @@ -91,7 +91,8 @@ extension JoinAgreementViewController {
firstCheckButtonTapped: firstCheck,
secondCheckButtonTapped: secondCheck,
thirdCheckButtonTapped: thirdCheck,
fourthCheckButtonTapped: fourtchCheck)
fourthCheckButtonTapped: fourtchCheck,
nextButtonTapped: nextButtonTapped)

let output = self.viewModel.transform(from: input, cancelBag: self.cancelBag)

Expand Down Expand Up @@ -158,5 +159,12 @@ extension JoinAgreementViewController {
}
}
.store(in: self.cancelBag)

output.pushViewController
.sink { _ in
let viewController = JoinProfileViewController(viewModel: JoinProfileViewModel())
self.navigationController?.pushViewController(viewController, animated: true)
}
.store(in: self.cancelBag)
}
}
Loading