Skip to content

Clody_iOS_Coding Template

김나연 edited this page Jul 4, 2024 · 4 revisions

import UIKit

import RxCocoa
import RxSwift
import Then

final class [Name]ViewController: UIViewController {
    
    // MARK: - Properties
    
    private let viewModel = [Name]ViewModel()
    private let disposeBag = DisposeBag()
    
    // MARK: - UI Components
     
    private let rootView = [Name]View()
    
    // MARK: - Life Cycles
    
    override func loadView() {
        super.loadView()
        
        view = rootView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        bindViewModel()
        setUI()
        setDelegate()
        setAddTarget()
    }
}

// MARK: - Extensions

private extension SaveCompleteViewController {

    func bindViewModel() {
        /// 예시입니다. 참고한 후 삭제해주세요.
        let input = LoginViewModel.Input(
            appleLoginButtonTapEvent: appleLoginButton.rx.tap.asSignal(),
            kakaoLoginButtonTapEvent: kakaoLoginButton.rx.tap.asSignal()
        )
        
        let output = viewModel.transform(from: input, disposeBag: disposeBag)
        
        output.pushViewController
            .drive(onNext: { [weak self] in
                self?.navigationController?.pushViewController(UIViewController(), animated: true)
            })
            .disposed(by: disposeBag)
    }

    func setUI() { // 탭바, 내비바, 그외 ...
    }
    
    func setDelegate() {
    }
    
    func setAddTarget() {
    }
    
    // MARK: - Actions
    
    @objc
    func buttonDidTap() {
        /// 필요 없으면 함수와 마크주석을 삭제해주세요.
    }
}
import UIKit

import SnapKit

class BaseView: UIView {
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setUI()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    final func setUI() {
        setStyle()
        setHierarchy()
        setLayout()
    }
    
    /// View의 Style을 set 합니다.
    func setStyle() {}
    /// View의 Hierarchy를 set 합니다.
    func setHierarchy() {}
    /// View의 Layout을 set 합니다.
    func setLayout() {}
}
import UIKit

import SnapKit

final class [Name]CollectionViewCell: UICollectionViewCell {
    
    // TODO: 여기를 삭제하고 UI 컴포넌트를 생성하세요.
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        setStyle()
        setHierarchy()
        setLayout()
    }

    @available(*, unavailable)
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    func setStyle() {
    }
    
    func setHierarchy() {
        contentView.addSubviews()
    }
    
    func setLayout() {
    }
}

extension [Name]CollectionViewCell {
    
    func configure() {
    }
}
import UIKit

import RxSwift

protocol ViewModelType {
    associatedtype Input
    associatedtype Output

    func transform(from input: Input, disposeBag: RxSwift.DisposeBag) -> Output
}

final class [Name]ViewModel: ViewModelType {

    struct Input {
        let appleLoginButtonTapEvent: Signal<Void>
        let kakaoLoginButtonTapEvent: Signal<Void>
    }
    
    struct Output {
        let pushViewController: Driver<Void>
    }
    
    func transform(from input: Input, disposeBag: DisposeBag) -> Output {
        /// 예시입니다. 참고한 후 삭제해주세요.
        let pushViewController = BehaviorRelay<Void>
            .merge(
                input.appleLoginButtonTapEvent.asObservable(),
                input.kakaoLoginButtonTapEvent.asObservable()
            )
            .asDriver(onErrorJustReturn: Void())
        
        return Output(pushViewController: pushViewController)
    }
}
  1. 폴더링
├── Application
   ├── Appdelegate
   └── SceneDelegate
├── Global
   ├── Extensions
   ├── Literals
      ├── Literal
      └──String
   ├── Protocols
   ├── Resources
      ├── Font
      ├── Assets
      └── Info.plist
   └── SupportingFiles
       └── Base
           └── LaunchScreen
├── Network
   ├── Base
      ├── BaseTargetType.swift
      ├── GeneralResponse.swift
      └── ... (기본 네트워크 세팅 파일)
   ├── Environment
      └── Config
   ├── MoyaTarget
   └── Service
└── Presentation 
    ├── Common
       ├── Base
       └── Component
    └── Home
        ├── ViewControllers
        ├── Views
        ├── Models
        ├── ViewModels
        └── Cells
Clone this wiki locally