์กฐ๋์ SwiftUI ๊ตฌ์กฐ ์ฐ๊ตฌ ๋์๋
sh install-JDA.sh
import JDA
final class ContentViewModel: ViewModelType { }
@Published var state = State()
var action = ActionSubject<Action>()
var cancelable = Set<AnyCancellable>()
enum Action {
case buttonDidTap
case validationText(String)
}
func effect(action: Action) -> any Publisher<Effect, Never> {
switch action {
case .buttonDidTap:
guard let id = Int(state.inputText) else {
return Empty().eraseToAnyPublisher()
}
return APIService.shared.singleUser(id: id)
.map { _ in .reqres }
.catch { _ in return Just<Effect>(.reqresError) }
case .validationText(let text):
return Just(.validation(text))
}
}
enum Effect {
case reqres
case reqresError
case validation(String)
}
func reduce(effect: Effect, state: State) -> State {
var newState = state
switch effect {
case .reqres:
newState.response = "reqres"
case .reqresError:
newState.response = "Error Occur"
case .validation(let text):
newState.inputText = text
newState.validText = text.uppercased()
}
return newState
}
struct State {
var response: String = "response"
var inputText: String = ""
var validText: String = "validtext"
}
struct ContentView: ViewType { }
typealias ViewModel = ContentViewModel
@StateObject var viewModel: ContentViewModel
Button("Request") {
viewModel.action.send(.buttonDidTap)
}
TextField("Validation Text", text: viewModel.value({
$0.inputText
}, action: {
ContentViewModel.Action.validationText($0)
}))
Text(viewModel.state.response)
Text(viewModel.state.validText)
link |
Stars: 2 |
Last commit: 1 year ago |
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics