diff --git a/dimensionhub/Views/DetailView.swift b/dimensionhub/Views/DetailView.swift index 6129b5a..e655141 100644 --- a/dimensionhub/Views/DetailView.swift +++ b/dimensionhub/Views/DetailView.swift @@ -71,6 +71,11 @@ final class DetailModel { } + enum FollowResult { + case success + case error(String, String) + } + var name: String = "" var summary: String = "" var thumb: String = "" @@ -113,12 +118,11 @@ final class DetailModel { } @MainActor - func onTapFollowButton(userId: Int, id: Int, status: String) async { + func onTapFollowButton(userId: Int, id: Int, status: String) async -> FollowResult { let response = await API.followDrama(userId: userId, id: id, status: status, as: [String].self) switch response { case .error(let code, let message): - print(code) - print(message) + return .error("错误", message) case .result(let newStatuses): self.statuses = newStatuses.flatMap({ s in if let status = DramaStatus(s) { @@ -127,6 +131,7 @@ final class DetailModel { return [] } }) + return .success } } @@ -135,6 +140,11 @@ final class DetailModel { struct DetailView: View { @State var detailModel = DetailModel() @State var showAllSummary: Bool = false + + // 错误提示信息 + @State var showAlert: Bool = false + @State var errorInfo: (String, String) = ("", "") + let id: Int var body: some View { @@ -175,7 +185,14 @@ struct DetailView: View { ForEach(detailModel.statuses, id: \.status) { status in FollowButtonView(dramaStatus: status) { followStatus in Task { - await detailModel.onTapFollowButton(userId: 1, id: id, status: followStatus) + let result = await detailModel.onTapFollowButton(userId: 1, id: id, status: followStatus) + switch result { + case .success: + () + case .error(let title, let message): + self.errorInfo = (title, message) + self.showAlert = true + } } } } @@ -246,6 +263,9 @@ struct DetailView: View { Spacer() } .frame(width: 370, alignment: .center) + .alert(isPresented: $showAlert) { + Alert(title: Text(self.errorInfo.0), message: Text(self.errorInfo.1), dismissButton: .default(Text("OK"))) + } .task { await detailModel.loadData(userId: 1, id: self.id) print(detailModel.summary)