Skip to content

Commit

Permalink
Merge branch 'Test'
Browse files Browse the repository at this point in the history
Conflicts:
	SwiftlyNetworker.podspec
  • Loading branch information
jungseungyeo committed Mar 14, 2022
2 parents 34617d3 + d4d4fb9 commit 99476b9
Show file tree
Hide file tree
Showing 10 changed files with 403 additions and 35 deletions.
4 changes: 2 additions & 2 deletions Example/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
PODS:
- SwiftlyNetworker (0.1.1)
- SwiftlyNetworker (0.1.4)

DEPENDENCIES:
- SwiftlyNetworker (from `../`)
Expand All @@ -9,7 +9,7 @@ EXTERNAL SOURCES:
:path: "../"

SPEC CHECKSUMS:
SwiftlyNetworker: d3761b01d332b713f7b4b5ef5dcad477ac11c9bd
SwiftlyNetworker: c23c4a9d597ef91329da7aa91d4d763055b12866

PODFILE CHECKSUM: e3522db35fc3454eca35df68d9d6b86edee575f5

Expand Down
58 changes: 53 additions & 5 deletions Example/SwiftlyNetworker.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; };
607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; };
65261EA4BCF52BD865600B81 /* Pods_SwiftlyNetworker_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9197557F33F64D775DB4253E /* Pods_SwiftlyNetworker_Tests.framework */; };
982EF48127DF7F6600AF358B /* UIImage+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 982EF48027DF7F6500AF358B /* UIImage+.swift */; };
982EF48327DF7F9E00AF358B /* SojuCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 982EF48227DF7F9E00AF358B /* SojuCollectionViewCell.swift */; };
982EF48527DF801800AF358B /* SojuCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 982EF48427DF801800AF358B /* SojuCollectionViewCell.xib */; };
982EF48727DF844800AF358B /* CombineNetworkerCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 982EF48627DF844800AF358B /* CombineNetworkerCollectionView.swift */; };
98DF1E0627DDBC96007D063C /* DefaultCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98DF1E0527DDBC96007D063C /* DefaultCollectionCell.swift */; };
98DF1E0827DDBD38007D063C /* NetworkerDefaultViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98DF1E0727DDBD38007D063C /* NetworkerDefaultViewController.swift */; };
98DF1E0B27DDBF75007D063C /* SojuAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98DF1E0A27DDBF75007D063C /* SojuAPI.swift */; };
Expand Down Expand Up @@ -48,6 +52,10 @@
607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = "<group>"; };
9197557F33F64D775DB4253E /* Pods_SwiftlyNetworker_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SwiftlyNetworker_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
982EF48027DF7F6500AF358B /* UIImage+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+.swift"; sourceTree = "<group>"; };
982EF48227DF7F9E00AF358B /* SojuCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SojuCollectionViewCell.swift; sourceTree = "<group>"; };
982EF48427DF801800AF358B /* SojuCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SojuCollectionViewCell.xib; sourceTree = "<group>"; };
982EF48627DF844800AF358B /* CombineNetworkerCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CombineNetworkerCollectionView.swift; sourceTree = "<group>"; };
98DF1E0527DDBC96007D063C /* DefaultCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultCollectionCell.swift; sourceTree = "<group>"; };
98DF1E0727DDBD38007D063C /* NetworkerDefaultViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkerDefaultViewController.swift; sourceTree = "<group>"; };
98DF1E0A27DDBF75007D063C /* SojuAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SojuAPI.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -121,12 +129,13 @@
607FACD21AFB9204008FA782 /* Example for SwiftlyNetworker */ = {
isa = PBXGroup;
children = (
982EF48B27DF86AB00AF358B /* Closure */,
982EF48A27DF867300AF358B /* Combine */,
982EF48927DF864000AF358B /* Extension */,
982EF48827DF863100AF358B /* Root */,
98DF1E0927DDBF63007D063C /* Networker-Default */,
607FACD51AFB9204008FA782 /* AppDelegate.swift */,
607FACD71AFB9204008FA782 /* ViewController.swift */,
98DF1E0527DDBC96007D063C /* DefaultCollectionCell.swift */,
607FACD91AFB9204008FA782 /* Main.storyboard */,
607FACDC1AFB9204008FA782 /* Images.xcassets */,
607FACD91AFB9204008FA782 /* Main.storyboard */,
607FACDE1AFB9204008FA782 /* LaunchScreen.xib */,
607FACD31AFB9204008FA782 /* Supporting Files */,
);
Expand Down Expand Up @@ -169,12 +178,47 @@
name = "Podspec Metadata";
sourceTree = "<group>";
};
982EF48827DF863100AF358B /* Root */ = {
isa = PBXGroup;
children = (
607FACD51AFB9204008FA782 /* AppDelegate.swift */,
607FACD71AFB9204008FA782 /* ViewController.swift */,
98DF1E0527DDBC96007D063C /* DefaultCollectionCell.swift */,
982EF48227DF7F9E00AF358B /* SojuCollectionViewCell.swift */,
982EF48427DF801800AF358B /* SojuCollectionViewCell.xib */,
);
name = Root;
sourceTree = "<group>";
};
982EF48927DF864000AF358B /* Extension */ = {
isa = PBXGroup;
children = (
982EF48027DF7F6500AF358B /* UIImage+.swift */,
);
name = Extension;
sourceTree = "<group>";
};
982EF48A27DF867300AF358B /* Combine */ = {
isa = PBXGroup;
children = (
982EF48627DF844800AF358B /* CombineNetworkerCollectionView.swift */,
);
name = Combine;
sourceTree = "<group>";
};
982EF48B27DF86AB00AF358B /* Closure */ = {
isa = PBXGroup;
children = (
98DF1E0727DDBD38007D063C /* NetworkerDefaultViewController.swift */,
);
name = Closure;
sourceTree = "<group>";
};
98DF1E0927DDBF63007D063C /* Networker-Default */ = {
isa = PBXGroup;
children = (
98DF1E0A27DDBF75007D063C /* SojuAPI.swift */,
98DF1E0E27DDC08B007D063C /* SojuModel.swift */,
98DF1E0727DDBD38007D063C /* NetworkerDefaultViewController.swift */,
);
name = "Networker-Default";
sourceTree = "<group>";
Expand Down Expand Up @@ -269,6 +313,7 @@
607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */,
607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */,
607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */,
982EF48527DF801800AF358B /* SojuCollectionViewCell.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -352,11 +397,14 @@
buildActionMask = 2147483647;
files = (
98DF1E0F27DDC08B007D063C /* SojuModel.swift in Sources */,
982EF48127DF7F6600AF358B /* UIImage+.swift in Sources */,
98DF1E0827DDBD38007D063C /* NetworkerDefaultViewController.swift in Sources */,
982EF48727DF844800AF358B /* CombineNetworkerCollectionView.swift in Sources */,
98DF1E0627DDBC96007D063C /* DefaultCollectionCell.swift in Sources */,
607FACD81AFB9204008FA782 /* ViewController.swift in Sources */,
607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */,
98DF1E0B27DDBF75007D063C /* SojuAPI.swift in Sources */,
982EF48327DF7F9E00AF358B /* SojuCollectionViewCell.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
18 changes: 18 additions & 0 deletions Example/SwiftlyNetworker/Base.lproj/Main.storyboard
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,24 @@
</objects>
<point key="canvasLocation" x="719" y="81"/>
</scene>
<!--Combine Networker Collection View-->
<scene sceneID="3Af-jg-r50">
<objects>
<viewController storyboardIdentifier="CombineNetworkerCollectionView" useStoryboardIdentifierAsRestorationIdentifier="YES" id="mme-In-XaD" customClass="CombineNetworkerCollectionView" customModule="SwiftlyNetworker_Example" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="nug-IO-qip"/>
<viewControllerLayoutGuide type="bottom" id="Wys-9y-pR6"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="hLx-iT-Ju9">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="e47-do-sQo" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1460" y="101"/>
</scene>
</scenes>
<resources>
<systemColor name="systemBackgroundColor">
Expand Down
103 changes: 103 additions & 0 deletions Example/SwiftlyNetworker/CombineNetworkerCollectionView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
//
// CombineNetworkerCollectionView.swift
// SwiftlyNetworker_Example
//
// Created by saeng lin on 2022/03/14.
// Copyright © 2022 CocoaPods. All rights reserved.
//

import UIKit
import SwiftlyNetworker
import Combine

extension CombineNetworkerCollectionView {
static func instance(_ networkerLogic: NetworkerLogic) -> CombineNetworkerCollectionView {
let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CombineNetworkerCollectionView") as! CombineNetworkerCollectionView


viewController.networker = networkerLogic

return viewController
}
}

class CombineNetworkerCollectionView: UIViewController {

private var networker: NetworkerLogic!

private lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)

collectionView.delegate = self
collectionView.dataSource = self

collectionView.translatesAutoresizingMaskIntoConstraints = false

collectionView.register(UINib(nibName: "SojuCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: SojuCollectionViewCell.registerID)

return collectionView
}()

private var model: Model?

private var cancellables = Set<AnyCancellable>()

override func viewDidLoad() {
super.viewDidLoad()

self.view.addSubview(collectionView)

NSLayoutConstraint.activate([
collectionView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])

networker.request(SojuAPI.list)
.receive(on: DispatchQueue.main)
.sink { completion in
switch completion {
case .finished:
print("finish")
case .failure(let error):
print("error: \(error.localizedDescription)")
}
} receiveValue: { [weak self] (model: Model) in
guard let self = self else { return }
self.model = model
self.collectionView.reloadData()
}.store(in: &cancellables)

}
}

extension CombineNetworkerCollectionView: UICollectionViewDelegateFlowLayout {
func collectionView(
_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath
) -> CGSize {
return .init(width: collectionView.frame.size.width, height: 130)
}
}

extension CombineNetworkerCollectionView: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return model?.sojus?.count ?? 0
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: SojuCollectionViewCell.registerID, for: indexPath) as? SojuCollectionViewCell else {
return UICollectionViewCell()
}

guard let model = model?.sojus?[indexPath.row] else { return cell }

cell.configure(model)

return cell
}

}
95 changes: 70 additions & 25 deletions Example/SwiftlyNetworker/NetworkerDefaultViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,43 +11,88 @@ import SwiftlyNetworker
import Combine

extension NetworkerDefaultViewController {
static func instance() -> NetworkerDefaultViewController {
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NetworkerDefaultViewController") as! NetworkerDefaultViewController
static func instance(_ networkerLogic: NetworkerLogic) -> NetworkerDefaultViewController {

let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NetworkerDefaultViewController") as! NetworkerDefaultViewController

viewController.networker = networkerLogic

return viewController
}
}

class NetworkerDefaultViewController: UIViewController {

private lazy var networker: NetworkerLogic = {
return SwiftlyNetworker(baseURL: "https://raw.githubusercontent.com/jungseungyeo/")
private var networker: NetworkerLogic!

private lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)

collectionView.delegate = self
collectionView.dataSource = self

collectionView.translatesAutoresizingMaskIntoConstraints = false

collectionView.register(UINib(nibName: "SojuCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: SojuCollectionViewCell.registerID)

return collectionView
}()

private var cancelables: Set<AnyCancellable> = Set<AnyCancellable>()
private var model: Model?

override func viewDidLoad() {
super.viewDidLoad()

// networker.request(SojuAPI.list) { (result: Result<Model, Error>) in
// switch result {
// case .success(let model):
// print("model: \(model)")
// case .failure(let error):
// print("error: \(error.localizedDescription)")
// }
// }


networker.request(SojuAPI.list)
.sink { completion in
switch completion {
case .failure(let error):
print("error: \(error.localizedDescription)")
case .finished:
print("finished")
self.view.addSubview(collectionView)

NSLayoutConstraint.activate([
collectionView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])

networker.request(SojuAPI.list) { [weak self] (result: Result<Model, Error>) in
switch result {
case .success(let model):
DispatchQueue.main.async {
self?.model = model
self?.collectionView.reloadData()
}
} receiveValue: { (model: Model) in
print("1231213")
}.store(in: &cancelables)

case .failure(let error):
print("error: \(error.localizedDescription)")
}
}
}
}

extension NetworkerDefaultViewController: UICollectionViewDelegateFlowLayout {
func collectionView(
_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath
) -> CGSize {
return .init(width: collectionView.frame.size.width, height: 130)
}
}

extension NetworkerDefaultViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return model?.sojus?.count ?? 0
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: SojuCollectionViewCell.registerID, for: indexPath) as? SojuCollectionViewCell else {
return UICollectionViewCell()
}

guard let model = model?.sojus?[indexPath.row] else { return cell }

cell.configure(model)

return cell
}

}
2 changes: 1 addition & 1 deletion Example/SwiftlyNetworker/SojuAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ extension SojuAPI: APIable {
}

var path: String {
"/TestJSONfile/main/JSON/Test.jsonasdfsdf"
"/TestJSONfile/main/JSON/Test.json"
}

var method: HttpMethod {
Expand Down
Loading

0 comments on commit 99476b9

Please sign in to comment.