-
Notifications
You must be signed in to change notification settings - Fork 5
3주차 그룹 피어세션(iOS)
Seungeon-Kim edited this page Nov 13, 2020
·
1 revision
MVVM -> 테스트를 열심히 해보자!
class IssueListViewModel {
struct Status {
var issues = Bindable(IssueListModel.all())
var searchResultTitleList = Bindable([String]())
var searchResultList = Bindable(IssueListModel.all())
var filterResult = Bindable(IssueListModel.all())
}
struct Action {
var searchTextChanged: (String) -> Void
var searchButtonClicked: (String) -> Void
var searchCancelButtonClicked: () -> Void
var closeButtonTabbed: (Int) -> Void
var deleteButtonTabbed: (Int) -> Void
var refreshData: () -> Void
var addIssueTabbed: (Int?, String, String) -> Void
var issueFilter: ([Int]) -> Void
}
}
func test_Login_입력아이디가_6자미만이면_유효하지않다() throws {
let id = "12345"
let viewModel = SignInViewModel()
viewModel.status.buttonEnabled.bind({ idCheck, passwordCheck in
XCTAssertFalse(idCheck)
})
viewModel.action.idTextFieldChanged(id)
}
NetworkLayer
func fetchLabels(completion handler: @escaping (Result<Labels, AFError>) -> Void) {
guard let url = URL(string: baseURL + Endpoint.label.rawValue),
let token = PersistenceManager.shared.load(forKey: .token) else {
return
}
let headers: HTTPHeaders = [.authorization(bearerToken: token)]
AF.request(url,
method: .get,
headers: headers)
.validate()
.responseDecodable(of: Labels.self) { response in
handler(response.result)
}
}
DispatchGroup
let dispatchGroup = DispatchGroup()
dispatchGroup.enter()
function call()
dispatchGroup.leave()
dispatchGroup.notify(queue: DispatchQueue.main) {
function callback()
}
Coordinator
protocol Coordinator: class {
var finishDelegate: CoordinatorFinishDelegate? { get set }
var navigationController: UINavigationController { get set }
var childCoordinators: [Coordinator] { get set }
var type: CoordinatorType { get }
func start()
func finish()
init(_ navigationController: UINavigationController)
}
extension Coordinator {
func finish() {
childCoordinators.removeAll()
finishDelegate?.coordinatorDidFinish(childCoordinator: self)
}
}
protocol CoordinatorFinishDelegate: class {
func coordinatorDidFinish(childCoordinator: Coordinator)
}
enum CoordinatorType {
case jrm, tab, signIn, signUp, issueList, labelList, milestoneList
}
- 허심탄회하게 Go..! <- 진실게임
- prepareForUse()
- 셀을 재사용하기 전에 프로퍼티를 초기화 해주어야 했다....!
guard let url = (issueAPIURL + "\(oldName)").addingPercentEncoding(
withAllowedCharacters: .urlQueryAllowed) else { return }
// parameter가 배열일 때, encoder
let encoder = URLEncodedFormParameterEncoder(encoder: URLEncodedFormEncoder(arrayEncoding: .noBrackets))
- 웹에서 파싱을 한 번 더 해줘야 또는 인코딩을 해줘야
- Alamofire 문제
- BottomSheetView (Pengesture) https://github.com/ahmad-elassuty/BottomSheetController