Skip to content

Commit

Permalink
[Refactor] 로그인 뷰 MVVM 리팩토링 (#7)
Browse files Browse the repository at this point in the history
  • Loading branch information
seuriseuljjeok committed May 28, 2024
1 parent 6e09e9a commit da84091
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 27 deletions.
18 changes: 15 additions & 3 deletions Tving_CloneProject/Tving_CloneProject.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
CA3953222BC6FA9F00B15E91 /* Constant.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3953212BC6FA9F00B15E91 /* Constant.swift */; };
CA3953252BC6FB1100B15E91 /* ScreenUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3953242BC6FB1100B15E91 /* ScreenUtils.swift */; };
CA3BA70F2BFE7E9800F77616 /* MainViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3BA70E2BFE7E9800F77616 /* MainViewModel.swift */; };
CA803D982C05B977006B8C35 /* LoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA803D972C05B977006B8C35 /* LoginViewModel.swift */; };
CA8496E22BE7E36D0064E0CC /* Moya in Frameworks */ = {isa = PBXBuildFile; productRef = CA8496E12BE7E36D0064E0CC /* Moya */; };
CA8496E52BE7E54D0064E0CC /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8496E42BE7E54D0064E0CC /* Config.swift */; };
CA8496E72BE7E8E60064E0CC /* GetMovieResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8496E62BE7E8E60064E0CC /* GetMovieResponseModel.swift */; };
Expand Down Expand Up @@ -90,6 +91,7 @@
CA3953212BC6FA9F00B15E91 /* Constant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constant.swift; sourceTree = "<group>"; };
CA3953242BC6FB1100B15E91 /* ScreenUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScreenUtils.swift; sourceTree = "<group>"; };
CA3BA70E2BFE7E9800F77616 /* MainViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewModel.swift; sourceTree = "<group>"; };
CA803D972C05B977006B8C35 /* LoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewModel.swift; sourceTree = "<group>"; };
CA8496E42BE7E54D0064E0CC /* Config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = "<group>"; };
CA8496E62BE7E8E60064E0CC /* GetMovieResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetMovieResponseModel.swift; sourceTree = "<group>"; };
CA8496E92BE89A840064E0CC /* BaseTargetType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTargetType.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -305,7 +307,8 @@
CA3953262BC6FC0E00B15E91 /* Login */ = {
isa = PBXGroup;
children = (
CA3953292BC6FC3D00B15E91 /* Views */,
CA803D962C05B959006B8C35 /* ViewModel */,
CA3953292BC6FC3D00B15E91 /* View */,
CA3953282BC6FC2C00B15E91 /* ViewControllers */,
);
path = Login;
Expand All @@ -328,12 +331,12 @@
path = ViewControllers;
sourceTree = "<group>";
};
CA3953292BC6FC3D00B15E91 /* Views */ = {
CA3953292BC6FC3D00B15E91 /* View */ = {
isa = PBXGroup;
children = (
CA39531F2BC6F6BE00B15E91 /* LoginView.swift */,
);
path = Views;
path = View;
sourceTree = "<group>";
};
CA39532A2BC6FC6A00B15E91 /* ViewControllers */ = {
Expand All @@ -352,6 +355,14 @@
path = ViewModel;
sourceTree = "<group>";
};
CA803D962C05B959006B8C35 /* ViewModel */ = {
isa = PBXGroup;
children = (
CA803D972C05B977006B8C35 /* LoginViewModel.swift */,
);
path = ViewModel;
sourceTree = "<group>";
};
CA8496DA2BE7D6550064E0CC /* Network */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -549,6 +560,7 @@
CA3953192BC47D3300B15E91 /* UILabel+.swift in Sources */,
CA902ECA2BDB8E5C00560D26 /* HeaderCategoryView.swift in Sources */,
CA902EC82BDB8D3900560D26 /* UnderlineSegmentedControlView.swift in Sources */,
CA803D982C05B977006B8C35 /* LoginViewModel.swift in Sources */,
CAB6E7EC2C0485E300E49F9E /* DailyBoxOfficeCell.swift in Sources */,
CA3953172BC45DA300B15E91 /* UIFont+.swift in Sources */,
CA3952E82BC31F9900B15E91 /* SceneDelegate.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ class LoginView: UIView {

weak var delegate: LoginViewDelegate?

private let loginViewModel: LoginViewModel = LoginViewModel()


// MARK: - Life Cycles

Expand Down Expand Up @@ -85,7 +87,6 @@ private extension LoginView {
}

func setStyle() {

self.backgroundColor = UIColor(resource: .black)

idTextField.do {
Expand Down Expand Up @@ -201,17 +202,17 @@ private extension LoginView {

@objc
func textFieldChange() {
let id = self.idTextField.text ?? ""
let pw = self.pwTextField.text ?? ""
let id = self.idTextField.text
let pw = self.pwTextField.text

if !id.isEmpty {
if loginViewModel.checkId(id: id) {
idClearButton.isHidden = false
} else {
pwClearButton.isHidden = false
maskButton.isHidden = false
}

setLoginButton(isEnabled: !id.isEmpty && !pw.isEmpty)
setLoginButton(isEnabled: loginViewModel.checkValid(id: id, pw: pw))
}

@objc
Expand All @@ -222,9 +223,9 @@ private extension LoginView {
@objc
func clearButtonTapped(_ sender: UIButton) {
if sender.tag == 0 {
self.idTextField.text = ""
self.loginViewModel.clearText(textfield: self.idTextField)
} else {
self.pwTextField.text = ""
self.loginViewModel.clearText(textfield: self.pwTextField)
}
setLoginButton(isEnabled: false)
}
Expand All @@ -244,23 +245,11 @@ private extension LoginView {
extension LoginView: UITextFieldDelegate {

func textFieldDidBeginEditing (_ textField: UITextField) {

if textField.placeholder == "아이디" {
self.idTextField.layer.borderWidth = 1
self.idTextField.layer.borderColor = UIColor(resource: .grey2).cgColor
} else {
self.pwTextField.layer.borderWidth = 1
self.pwTextField.layer.borderColor = UIColor(resource: .grey2).cgColor
}

textField.layer.borderWidth = 1
textField.layer.borderColor = UIColor(resource: .grey2).cgColor
}

func textFieldDidEndEditing(_ textField: UITextField) {

if textField.placeholder == "아이디" {
self.idTextField.layer.borderWidth = 0
} else {
self.pwTextField.layer.borderWidth = 0
}
textField.layer.borderWidth = 0
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,39 @@
// Created by 윤희슬 on 5/28/24.
//

import Foundation
import UIKit

final class LoginViewModel {

// MARK: - Properties

var errMessage: String = ""
}

extension LoginViewModel {

func checkValid(id: String?, pw: String?) -> Bool {
guard let id else {
errMessage = "아이디를 입력해주세요"
return false
}

guard let pw else {
errMessage = "비밀번호를 입력해주세요"
return false
}

return true
}

func checkId(id: String?) -> Bool {
guard let id else {
return false
}
return true
}

func clearText(textfield: UITextField) {
textfield.text = ""
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import UIKit
import SnapKit
import Then

class MainViewController: UIViewController {
final class MainViewController: UIViewController {

// MARK: - UI Properties

Expand Down

0 comments on commit da84091

Please sign in to comment.