Skip to content

difference between "MVC" and "MVVM" #2

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

Open
wants to merge 49 commits into
base: mvc
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
f298266
add DataSources and Presenters
marty-suzuki Jan 23, 2018
e16f4d2
add viewModels
marty-suzuki Jan 23, 2018
44bcb71
sort project
marty-suzuki Feb 28, 2019
adeec19
Merge branch 'mvc' into mvp
marty-suzuki Feb 28, 2019
1678d8f
fix conflict
marty-suzuki Feb 28, 2019
9bde5a1
fix Main.storyboard
marty-suzuki Mar 1, 2019
41ac4a8
Merge branch 'mvc' into mvp
marty-suzuki Mar 1, 2019
04b397c
fix conflict
marty-suzuki Mar 1, 2019
af026a7
Merge branch 'mvc' into mvp
marty-suzuki Mar 1, 2019
dabba37
fix initializer
marty-suzuki Mar 1, 2019
52705ee
Merge branch 'mvp' into mvvm
marty-suzuki Mar 1, 2019
e6e2ba9
fix conflict
marty-suzuki Mar 2, 2019
9bb5b8e
Merge branch 'mvc' into mvp
marty-suzuki Mar 2, 2019
ec7f9e2
Merge branch 'mvp' into mvvm
marty-suzuki Mar 2, 2019
1149765
fix project
marty-suzuki Mar 2, 2019
a54c3d6
fix FavoriteModel
marty-suzuki Mar 3, 2019
42af1c9
fix SearchModel
marty-suzuki Mar 3, 2019
0dfe9fe
fix RepositoryModel
marty-suzuki Mar 3, 2019
65ac8f4
fix diff
marty-suzuki Mar 3, 2019
c09a019
Merge branch 'mvc' into mvp
marty-suzuki Mar 4, 2019
e2bd594
Merge branch 'mvp' into mvvm
marty-suzuki Mar 4, 2019
40358f6
Merge branch 'mvc' into mvp
marty-suzuki Feb 11, 2021
a099ef1
Fix UserRepositoryViewPresenter
marty-suzuki Feb 11, 2021
fd6ab91
Fix RepositoryViewPresenter
marty-suzuki Feb 11, 2021
b9bcd11
Fix FavoriteViewPresenter
marty-suzuki Feb 11, 2021
ddade5a
Fix SearchViewPresenter
marty-suzuki Feb 11, 2021
f519cc1
Fix injection
marty-suzuki Feb 11, 2021
3437684
Merge branch 'mvc' into mvp
marty-suzuki Feb 11, 2021
f437c3c
Merge branch 'mvp' into mvvm
marty-suzuki Feb 12, 2021
e271174
Fix ApiSession
marty-suzuki Feb 12, 2021
82f4104
Fix FavoriteModel
marty-suzuki Feb 12, 2021
fc26e10
Fix RepositoryModel
marty-suzuki Feb 12, 2021
ee8508a
Fix SearchModel
marty-suzuki Feb 12, 2021
4b28c0d
Fix Favorite
marty-suzuki Feb 12, 2021
74b9128
Fix Repository
marty-suzuki Feb 12, 2021
6e17dd2
Fix UserRepository
marty-suzuki Feb 12, 2021
acc7832
Fix Search
marty-suzuki Feb 12, 2021
51087f4
Fix injection
marty-suzuki Feb 12, 2021
4cc53eb
Fix xcodeproj
marty-suzuki Feb 12, 2021
4f3d146
Fix FavoriteViewPresenter
marty-suzuki Feb 12, 2021
ac28868
Merge branch 'mvc' into mvp
marty-suzuki Feb 12, 2021
745d7ed
Fix images
marty-suzuki Feb 12, 2021
efee15f
Merge branch 'mvc' into mvp
marty-suzuki Feb 12, 2021
c40298b
Fix images
marty-suzuki Feb 12, 2021
d0dbf62
Merge branch 'mvp' into mvvm
marty-suzuki Feb 12, 2021
ad63067
Fix images
marty-suzuki Feb 12, 2021
ef603e2
Fix images
marty-suzuki Feb 12, 2021
0016cc6
Merge branch 'mvp' into mvvm
marty-suzuki Feb 12, 2021
422e543
Fix injection
marty-suzuki Feb 14, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix conflict
  • Loading branch information
marty-suzuki committed Mar 1, 2019
commit 04b397c908c74289be4766e71670b386bf630c0b
77 changes: 21 additions & 56 deletions iOSDesignPatternSamples.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@
37BE2ABB1F3745D0003DC1F8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 37BE2AB31F3745D0003DC1F8 /* Assets.xcassets */; };
37BE2ABC1F3745D0003DC1F8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 37BE2AB41F3745D0003DC1F8 /* LaunchScreen.storyboard */; };
37BE2AD61F37471B003DC1F8 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37BE2AD51F37471B003DC1F8 /* SafariServices.framework */; };
<<<<<<< HEAD
ED17C784222986A500FF4277 /* SearchViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ED17C783222986A500FF4277 /* SearchViewController.xib */; };
ED17C786222986AD00FF4277 /* FavoriteViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ED17C785222986AD00FF4277 /* FavoriteViewController.xib */; };
ED17C78A2229889E00FF4277 /* RepositoryModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED17C7872229889E00FF4277 /* RepositoryModel.swift */; };
ED17C78B2229889E00FF4277 /* SearchModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED17C7882229889E00FF4277 /* SearchModel.swift */; };
ED17C78C2229889E00FF4277 /* FavoriteModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED17C7892229889E00FF4277 /* FavoriteModel.swift */; };
ED57BA8F22285873004CD15B /* RepositoryViewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED57BA7622285873004CD15B /* RepositoryViewPresenter.swift */; };
ED57BA9022285873004CD15B /* RepositoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED57BA7722285873004CD15B /* RepositoryViewController.swift */; };
ED57BA9122285873004CD15B /* UserRepositoryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ED57BA7922285873004CD15B /* UserRepositoryViewController.xib */; };
Expand All @@ -31,15 +35,6 @@
ED57BA9F22285873004CD15B /* NSObjectProtocol.extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED57BA8D22285873004CD15B /* NSObjectProtocol.extension.swift */; };
ED57BAA022285873004CD15B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED57BA8E22285873004CD15B /* AppDelegate.swift */; };
ED57BAA622285B4A004CD15B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = ED57BAA422285B4A004CD15B /* Main.storyboard */; };
=======
37BE2AEB1F3748B6003DC1F8 /* UIKeyboardInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BE2AEA1F3748B6003DC1F8 /* UIKeyboardInfo.swift */; };
37BE2AF51F3759E7003DC1F8 /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BE2AF41F3759E7003DC1F8 /* LoadingView.swift */; };
37BE2AF71F3759F0003DC1F8 /* LoadingView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 37BE2AF61F3759F0003DC1F8 /* LoadingView.xib */; };
ED6EEE68222973CE007C3129 /* SearchModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED6EEE67222973CE007C3129 /* SearchModel.swift */; };
ED6EEE6A22297AD4007C3129 /* RepositoryModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED6EEE6922297AD4007C3129 /* RepositoryModel.swift */; };
ED6EEE6C22297D95007C3129 /* SearchViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ED6EEE6B22297D95007C3129 /* SearchViewController.xib */; };
ED6EEE6E22297E05007C3129 /* FavoriteViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ED6EEE6D22297E05007C3129 /* FavoriteViewController.xib */; };
>>>>>>> mvc
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
Expand All @@ -57,7 +52,11 @@
37BE2AE71F37480F003DC1F8 /* NoticeObserveKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NoticeObserveKit.framework; path = Carthage/Build/iOS/NoticeObserveKit.framework; sourceTree = "<group>"; };
86A9C053DE1021D9CB7BFF98 /* Pods_iOSDesignPatternSamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iOSDesignPatternSamples.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E7683412D64555F8497709C2 /* Pods-iOSDesignPatternSamples.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iOSDesignPatternSamples.release.xcconfig"; path = "Target Support Files/Pods-iOSDesignPatternSamples/Pods-iOSDesignPatternSamples.release.xcconfig"; sourceTree = "<group>"; };
<<<<<<< HEAD
ED17C783222986A500FF4277 /* SearchViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SearchViewController.xib; sourceTree = "<group>"; };
ED17C785222986AD00FF4277 /* FavoriteViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FavoriteViewController.xib; sourceTree = "<group>"; };
ED17C7872229889E00FF4277 /* RepositoryModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RepositoryModel.swift; sourceTree = "<group>"; };
ED17C7882229889E00FF4277 /* SearchModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchModel.swift; sourceTree = "<group>"; };
ED17C7892229889E00FF4277 /* FavoriteModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FavoriteModel.swift; sourceTree = "<group>"; };
ED57BA7622285873004CD15B /* RepositoryViewPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RepositoryViewPresenter.swift; sourceTree = "<group>"; };
ED57BA7722285873004CD15B /* RepositoryViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RepositoryViewController.swift; sourceTree = "<group>"; };
ED57BA7922285873004CD15B /* UserRepositoryViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UserRepositoryViewController.xib; sourceTree = "<group>"; };
Expand All @@ -77,12 +76,8 @@
ED57BA8D22285873004CD15B /* NSObjectProtocol.extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NSObjectProtocol.extension.swift; sourceTree = "<group>"; };
ED57BA8E22285873004CD15B /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
ED57BAA522285B4A004CD15B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = iOSDesignPatternSamples/Resources/Base.lproj/Main.storyboard; sourceTree = SOURCE_ROOT; };
=======
ED6EEE67222973CE007C3129 /* SearchModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchModel.swift; sourceTree = "<group>"; };
ED6EEE6922297AD4007C3129 /* RepositoryModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepositoryModel.swift; sourceTree = "<group>"; };
ED6EEE6B22297D95007C3129 /* SearchViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchViewController.xib; sourceTree = "<group>"; };
ED6EEE6D22297E05007C3129 /* FavoriteViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FavoriteViewController.xib; sourceTree = "<group>"; };
>>>>>>> mvc
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -153,17 +148,10 @@
C72F81EC67A22FD83004732D /* Pods */ = {
isa = PBXGroup;
children = (
<<<<<<< HEAD
12A585EA9BD1550442F668A2 /* Pods-iOSDesignPatternSamples.debug.xcconfig */,
E7683412D64555F8497709C2 /* Pods-iOSDesignPatternSamples.release.xcconfig */,
=======
37086C1D2017847A00D625CA /* Extension */,
37BE2AE91F374889003DC1F8 /* NotieObserver */,
37BE2AC11F37460C003DC1F8 /* AppDelegate.swift */,
372936AD1F54538A00762D15 /* FavoriteModel.swift */,
ED6EEE6922297AD4007C3129 /* RepositoryModel.swift */,
ED6EEE67222973CE007C3129 /* SearchModel.swift */,
>>>>>>> mvc
);
path = Pods;
sourceTree = "<group>";
Expand All @@ -179,13 +167,8 @@
ED57BA7322285873004CD15B /* Sources */ = {
isa = PBXGroup;
children = (
<<<<<<< HEAD
ED57BA8822285873004CD15B /* Common */,
ED57BA7422285873004CD15B /* UI */,
=======
37BE2AC81F37468C003DC1F8 /* FavoriteViewController.swift */,
ED6EEE6D22297E05007C3129 /* FavoriteViewController.xib */,
>>>>>>> mvc
);
path = Sources;
sourceTree = "<group>";
Expand All @@ -206,13 +189,8 @@
ED57BA7522285873004CD15B /* Repository */ = {
isa = PBXGroup;
children = (
<<<<<<< HEAD
ED57BA7722285873004CD15B /* RepositoryViewController.swift */,
ED57BA7622285873004CD15B /* RepositoryViewPresenter.swift */,
=======
37BE2ACA1F374699003DC1F8 /* SearchViewController.swift */,
ED6EEE6B22297D95007C3129 /* SearchViewController.xib */,
>>>>>>> mvc
);
path = Repository;
sourceTree = "<group>";
Expand All @@ -232,6 +210,7 @@
isa = PBXGroup;
children = (
ED57BA7F22285873004CD15B /* FavoriteViewController.swift */,
ED17C785222986AD00FF4277 /* FavoriteViewController.xib */,
ED57BA8022285873004CD15B /* FavoriteViewDataSource.swift */,
ED57BA7E22285873004CD15B /* FavoriteViewPresenter.swift */,
);
Expand All @@ -242,6 +221,7 @@
isa = PBXGroup;
children = (
ED57BA8322285873004CD15B /* SearchViewController.swift */,
ED17C783222986A500FF4277 /* SearchViewController.xib */,
ED57BA8422285873004CD15B /* SearchViewDataSource.swift */,
ED57BA8222285873004CD15B /* SearchViewPresenter.swift */,
);
Expand All @@ -263,6 +243,9 @@
ED57BA8B22285873004CD15B /* Extension */,
ED57BA8922285873004CD15B /* NotieObserver */,
ED57BA8E22285873004CD15B /* AppDelegate.swift */,
ED17C7892229889E00FF4277 /* FavoriteModel.swift */,
ED17C7872229889E00FF4277 /* RepositoryModel.swift */,
ED17C7882229889E00FF4277 /* SearchModel.swift */,
);
path = Common;
sourceTree = "<group>";
Expand Down Expand Up @@ -347,18 +330,12 @@
buildActionMask = 2147483647;
files = (
37BE2ABB1F3745D0003DC1F8 /* Assets.xcassets in Resources */,
ED6EEE6E22297E05007C3129 /* FavoriteViewController.xib in Resources */,
ED17C786222986AD00FF4277 /* FavoriteViewController.xib in Resources */,
37BE2ABC1F3745D0003DC1F8 /* LaunchScreen.storyboard in Resources */,
<<<<<<< HEAD
ED57BA9B22285873004CD15B /* LoadingView.xib in Resources */,
ED57BAA622285B4A004CD15B /* Main.storyboard in Resources */,
ED17C784222986A500FF4277 /* SearchViewController.xib in Resources */,
ED57BA9122285873004CD15B /* UserRepositoryViewController.xib in Resources */,
=======
37BE2AF71F3759F0003DC1F8 /* LoadingView.xib in Resources */,
37BE2ABD1F3745D0003DC1F8 /* Main.storyboard in Resources */,
ED6EEE6C22297D95007C3129 /* SearchViewController.xib in Resources */,
37BE2AD31F3746FA003DC1F8 /* UserRepositoryViewController.xib in Resources */,
>>>>>>> mvc
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand All @@ -373,6 +350,7 @@
inputFileListPaths = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-iOSDesignPatternSamples/Pods-iOSDesignPatternSamples-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/FluxCapacitor/FluxCapacitor.framework",
"${BUILT_PRODUCTS_DIR}/GithubKit/GithubKit.framework",
"${BUILT_PRODUCTS_DIR}/NoticeObserveKit/NoticeObserveKit.framework",
Expand All @@ -381,7 +359,6 @@
"${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework",
"${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework",
"${BUILT_PRODUCTS_DIR}/SwiftIconFont/SwiftIconFont.framework",
"${PODS_ROOT}/Target Support Files/Pods-iOSDesignPatternSamples/Pods-iOSDesignPatternSamples-frameworks.sh",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
Expand Down Expand Up @@ -430,37 +407,25 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
<<<<<<< HEAD
ED57BA9E22285873004CD15B /* ApiSession.extension.swift in Sources */,
ED57BAA022285873004CD15B /* AppDelegate.swift in Sources */,
ED17C78C2229889E00FF4277 /* FavoriteModel.swift in Sources */,
ED57BA9622285873004CD15B /* FavoriteViewController.swift in Sources */,
ED57BA9722285873004CD15B /* FavoriteViewDataSource.swift in Sources */,
ED57BA9522285873004CD15B /* FavoriteViewPresenter.swift in Sources */,
ED57BA9C22285873004CD15B /* LoadingView.swift in Sources */,
ED57BA9F22285873004CD15B /* NSObjectProtocol.extension.swift in Sources */,
ED17C78A2229889E00FF4277 /* RepositoryModel.swift in Sources */,
ED57BA9022285873004CD15B /* RepositoryViewController.swift in Sources */,
ED57BA8F22285873004CD15B /* RepositoryViewPresenter.swift in Sources */,
ED17C78B2229889E00FF4277 /* SearchModel.swift in Sources */,
ED57BA9922285873004CD15B /* SearchViewController.swift in Sources */,
ED57BA9A22285873004CD15B /* SearchViewDataSource.swift in Sources */,
ED57BA9822285873004CD15B /* SearchViewPresenter.swift in Sources */,
ED57BA9D22285873004CD15B /* UIKeyboardInfo.swift in Sources */,
ED57BA9222285873004CD15B /* UserRepositoryViewController.swift in Sources */,
ED57BA9322285873004CD15B /* UserRepositoryViewDataSource.swift in Sources */,
ED57BA9422285873004CD15B /* UserRepositoryViewPresenter.swift in Sources */,
=======
37086C212017850600D625CA /* ApiSession.extension.swift in Sources */,
37BE2AC21F37460C003DC1F8 /* AppDelegate.swift in Sources */,
372936AE1F54538A00762D15 /* FavoriteModel.swift in Sources */,
37BE2AC91F37468C003DC1F8 /* FavoriteViewController.swift in Sources */,
37BE2AF51F3759E7003DC1F8 /* LoadingView.swift in Sources */,
37086C1F2017848900D625CA /* NSObjectProtocol.extension.swift in Sources */,
ED6EEE6A22297AD4007C3129 /* RepositoryModel.swift in Sources */,
37BE2ACE1F3746E2003DC1F8 /* RepositoryViewController.swift in Sources */,
ED6EEE68222973CE007C3129 /* SearchModel.swift in Sources */,
37BE2ACB1F374699003DC1F8 /* SearchViewController.swift in Sources */,
37BE2AEB1F3748B6003DC1F8 /* UIKeyboardInfo.swift in Sources */,
37BE2AD21F3746FA003DC1F8 /* UserRepositoryViewController.swift in Sources */,
>>>>>>> mvc
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
20 changes: 3 additions & 17 deletions iOSDesignPatternSamples/Sources/Common/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,18 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
<<<<<<< HEAD
// Override point for customization after application launch.

if let viewControllers = (window?.rootViewController as? UITabBarController)?.viewControllers,
let searchVC = viewControllers.compactMap({
($0 as? UINavigationController)?.topViewController as? SearchViewController
}).first,
let favoriteVC = viewControllers.compactMap({
($0 as? UINavigationController)?.topViewController as? FavoriteViewController
}).first {
searchVC.favoritePresenter = favoriteVC.presenter
}
=======
>>>>>>> mvc

let favoriteModel = FavoriteModel()
let favoritePresenter = FavoriteViewPresenter()

if let viewControllers = (window?.rootViewController as? UITabBarController)?.viewControllers {
for value in viewControllers.enumerated() {
switch value {
case let (0, nc as UINavigationController):
let searchVC = SearchViewController(searchModel: .init(), favoriteModel: favoriteModel)
let searchVC = SearchViewController(searchPresenter: SearchViewPresenter(), favoritePresenter: favoritePresenter)
nc.setViewControllers([searchVC], animated: false)

case let (1, nc as UINavigationController):
let searchVC = FavoriteViewController(favoriteModel: favoriteModel)
let searchVC = FavoriteViewController(presenter: favoritePresenter)
nc.setViewControllers([searchVC], animated: false)

default:
Expand Down
37 changes: 37 additions & 0 deletions iOSDesignPatternSamples/Sources/Common/FavoriteModel.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
//
// FavoriteModel.swift
// iOSDesignPatternSamples
//
// Created by marty-suzuki on 2017/08/28.
// Copyright © 2017年 marty-suzuki. All rights reserved.
//

import GithubKit

@objc protocol FavoriteModelDelegate: class {
@objc optional func favoriteDidChange()
}

final class FavoriteModel {
private(set) var favorites: [Repository] = [] {
didSet {
delegate?.favoriteDidChange?()
}
}

weak var delegate: FavoriteModelDelegate?

func addFavorite(_ repository: Repository) {
if favorites.lazy.index(where: { $0.url == repository.url }) != nil {
return
}
favorites.append(repository)
}

func removeFavorite(_ repository: Repository) {
guard let index = favorites.lazy.index(where: { $0.url == repository.url }) else {
return
}
favorites.remove(at: index)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,47 +9,42 @@
import UIKit
import GithubKit

<<<<<<< HEAD
protocol FavoriteView: class {
func reloadData()
func showRepository(with repository: Repository)
}

final class FavoriteViewController: UIViewController, FavoriteView {
@IBOutlet weak var tableView: UITableView!

private(set) lazy var presenter: FavoritePresenter = FavoriteViewPresenter(view: self)
private lazy var dataSource: FavoriteViewDataSource = .init(presenter: self.presenter)

=======
final class FavoriteViewController: UIViewController {
@IBOutlet private(set) weak var tableView: UITableView!

let favoriteModel: FavoriteModel
let presenter: FavoritePresenter
let dataSource: FavoriteViewDataSource

init(favoriteModel: FavoriteModel) {
self.favoriteModel = favoriteModel
init(presenter: FavoritePresenter) {
self.presenter = presenter
self.dataSource = FavoriteViewDataSource(presenter: presenter)
super.init(nibName: FavoriteViewController.className, bundle: nil)
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

>>>>>>> mvc

override func viewDidLoad() {
super.viewDidLoad()

title = "On Memory Favorite"

presenter.view = self
dataSource.configure(with: tableView)
}

func showRepository(with repository: Repository) {
let vc = RepositoryViewController(repository: repository, favoritePresenter: presenter)
let repositoryPresenter = RepositoryViewPresenter(repository: repository, favoritePresenter: presenter)
let vc = RepositoryViewController(presenter: repositoryPresenter)
navigationController?.pushViewController(vc, animated: true)
}

func reloadData() {
tableView?.reloadData()
}
Expand Down
Loading