From def8c4c93a8a5af0880a74aab361ea9f2c6fde77 Mon Sep 17 00:00:00 2001 From: wangdl Date: Thu, 18 Jun 2026 17:14:34 +0800 Subject: [PATCH] fix: all iOS compile errors - protocols, missing fields, colors, shadowed max MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Protocol conformance: list→listAll with extension defaults - ContinueLearningResponse has no lastPosition→use nil - LearningSession has no readingTargetType/materialId→use defaults - Color.zxBlue→Color.blue, Color.zxIndigo→Color.indigo - Shadowed max parameter→Swift.max - ForEach Identifiable→explicit id: \.id Co-Authored-By: Claude Opus 4.7 --- .../UserInterfaceState.xcuserstate | Bin 108823 -> 109712 bytes .../Features/Analysis/AnalysisHomeView.swift | 8 +++--- .../MaterialReader/MaterialDetailView.swift | 18 ++++++++---- .../Features/Study/StudyHomeViewModel.swift | 26 ++++++++++-------- .../MaterialDetailViewModelTests.swift | 2 +- .../StudyHomeViewModelTests.swift | 4 +-- 6 files changed, 33 insertions(+), 25 deletions(-) diff --git a/AIStudyApp/AIStudyApp.xcodeproj/project.xcworkspace/xcuserdata/Admin1.xcuserdatad/UserInterfaceState.xcuserstate b/AIStudyApp/AIStudyApp.xcodeproj/project.xcworkspace/xcuserdata/Admin1.xcuserdatad/UserInterfaceState.xcuserstate index 9089d94ce730e9fc56176637306a0abea611f6f1..87f5d6e7b8c0bf878a792da6c57f75e4e96def56 100644 GIT binary patch delta 50383 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 x5$*;d{?E{cRLz4LtE#bTaY|7Z^R4Vd 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 a;Q#*5!&&~{f0k+U|Nis;e}+}A`F{Xi`vXG& diff --git a/AIStudyApp/AIStudyApp/Features/Analysis/AnalysisHomeView.swift b/AIStudyApp/AIStudyApp/Features/Analysis/AnalysisHomeView.swift index 21b8ad7..1d02b7d 100644 --- a/AIStudyApp/AIStudyApp/Features/Analysis/AnalysisHomeView.swift +++ b/AIStudyApp/AIStudyApp/Features/Analysis/AnalysisHomeView.swift @@ -39,10 +39,10 @@ struct AnalysisHomeView: View { } if let ls = viewModel.learningSummary { HStack(spacing: 12) { - ZXStatBadge(icon: "book.pages", label: "今日阅读", value: "\(ls.todaySeconds / 60) 分钟", trend: "", color: Color.zxBlue) + ZXStatBadge(icon: "book.pages", label: "今日阅读", value: "\(ls.todaySeconds / 60) 分钟", trend: "", color: Color.blue) ZXStatBadge(icon: "calendar.badge.clock", label: "本周阅读", value: "\(ls.weekSeconds / 60) 分钟", trend: "", color: Color.zxTeal) ZXStatBadge(icon: "doc.text", label: "已读资料", value: "\(ls.markedReadCount) 本", trend: "", color: Color.zxGreen) - ZXStatBadge(icon: "books.vertical", label: "阅读资料", value: "\(ls.materialsReadCount) 本", trend: "", color: Color.zxIndigo) + ZXStatBadge(icon: "books.vertical", label: "阅读资料", value: "\(ls.materialsReadCount) 本", trend: "", color: Color.indigo) } } VStack(alignment: .leading, spacing: 16) { @@ -88,7 +88,7 @@ struct AnalysisHomeView: View { Spacer() Text("最近 \(viewModel.recentRecords.count) 条").font(.system(size: 12)).foregroundColor(Color.zxF04) } - ForEach(viewModel.recentRecords.prefix(5)) { rec in + ForEach(viewModel.recentRecords.prefix(5), id: \.id) { rec in HStack(spacing: 10) { Circle().fill(rec.recordType == "reading" ? Color.zxPurple : Color.zxGreen).frame(width: 8, height: 8) VStack(alignment: .leading, spacing: 2) { @@ -275,5 +275,5 @@ private func formatDuration(_ seconds: Int) -> String { private func barHeight(val: Int, max: Int) -> CGFloat { guard max > 0 else { return 8 } - return max(8, CGFloat(val) / CGFloat(max) * 60) + return Swift.max(8, CGFloat(val) / CGFloat(max) * 60) } diff --git a/AIStudyApp/AIStudyApp/Features/MaterialReader/MaterialDetailView.swift b/AIStudyApp/AIStudyApp/Features/MaterialReader/MaterialDetailView.swift index 4196047..a6b70a1 100644 --- a/AIStudyApp/AIStudyApp/Features/MaterialReader/MaterialDetailView.swift +++ b/AIStudyApp/AIStudyApp/Features/MaterialReader/MaterialDetailView.swift @@ -9,14 +9,20 @@ protocol KnowledgeBaseServicing { extension KnowledgeBaseService: KnowledgeBaseServicing {} protocol KnowledgeItemServicing { - func list(knowledgeBaseId: String, sortBy: String?, order: String?) async throws -> [KnowledgeItem] + func listAll(knowledgeBaseId: String) async throws -> [KnowledgeItem] +} +extension KnowledgeItemService: KnowledgeItemServicing { + func listAll(knowledgeBaseId: String) async throws -> [KnowledgeItem] { + try await list(knowledgeBaseId: knowledgeBaseId, sortBy: nil, order: nil) + } } -extension KnowledgeItemService: KnowledgeItemServicing {} protocol QuizServicing { - func list(knowledgeBaseId: String) async throws -> [Quiz] + func listAll(knowledgeBaseId: String) async throws -> [Quiz] +} +extension QuizService: QuizServicing { + func listAll(knowledgeBaseId: String) async throws -> [Quiz] { try await list(knowledgeBaseId: knowledgeBaseId) } } -extension QuizService: QuizServicing {} protocol ReadingProgressServicing { func getReadingProgress(materialId: String, targetType: String) async throws -> MaterialReadingProgressDTO @@ -69,8 +75,8 @@ final class MaterialDetailViewModel: ObservableObject { isLoading = true async let kbResult = try? kbService.detail(id: knowledgeBaseId) - async let itemsResult = try? itemService.list(knowledgeBaseId: knowledgeBaseId) - async let quizzesResult = try? quizService.list(knowledgeBaseId: knowledgeBaseId) + async let itemsResult = try? itemService.listAll(knowledgeBaseId: knowledgeBaseId) + async let quizzesResult = try? quizService.listAll(knowledgeBaseId: knowledgeBaseId) async let progressResult: MaterialReadingProgressDTO? = { if let mid = materialId { return try? await readingService.getReadingProgress(materialId: mid, targetType: "knowledge_source") diff --git a/AIStudyApp/AIStudyApp/Features/Study/StudyHomeViewModel.swift b/AIStudyApp/AIStudyApp/Features/Study/StudyHomeViewModel.swift index b45acb0..5dddfb5 100644 --- a/AIStudyApp/AIStudyApp/Features/Study/StudyHomeViewModel.swift +++ b/AIStudyApp/AIStudyApp/Features/Study/StudyHomeViewModel.swift @@ -4,9 +4,11 @@ import Foundation // MARK: - Service protocols (for testability) protocol SessionServicing { - func list() async throws -> [LearningSession] + func listAll() async throws -> [LearningSession] +} +extension LearningSessionService: SessionServicing { + func listAll() async throws -> [LearningSession] { try await list() } } -extension LearningSessionService: SessionServicing {} protocol ReviewServicing { func dueCards() async throws -> [ReviewCard] @@ -14,9 +16,11 @@ protocol ReviewServicing { extension ReviewService: ReviewServicing {} protocol KBListServicing { - func list() async throws -> [KnowledgeBase] + func listAll() async throws -> [KnowledgeBase] +} +extension KnowledgeBaseService: KBListServicing { + func listAll() async throws -> [KnowledgeBase] { try await list() } } -extension KnowledgeBaseService: KBListServicing {} protocol QuizListServicing { func listAll() async throws -> [Quiz] @@ -98,10 +102,10 @@ final class StudyHomeViewModel: ObservableObject { loadingState = .loading banner = nil - async let sessions = try? sessionService.list() + async let sessions = try? sessionService.listAll() async let dueCards = try? reviewService.dueCards() async let quizzes = try? quizService.listAll() - async let knowledgeBases = try? kbService.list() + async let knowledgeBases = try? kbService.listAll() async let summary = try? activityService.summary() async let streak = try? activityService.streak() @@ -135,10 +139,10 @@ final class StudyHomeViewModel: ObservableObject { } func refresh() async { - async let sessions = try? sessionService.list() + async let sessions = try? sessionService.listAll() async let dueCards = try? reviewService.dueCards() async let quizzes = try? quizService.listAll() - async let knowledgeBases = try? kbService.list() + async let knowledgeBases = try? kbService.listAll() async let summary = try? activityService.summary() async let streak = try? activityService.streak() @@ -176,8 +180,7 @@ final class StudyHomeViewModel: ObservableObject { let resolved = MaterialPathResolver.resolve(materialId: materialId, apiType: cl.type, title: cl.title) { let kbTitle = cl.title ?? knowledgeBases.first?.title ?? "学习" let elapsed = formatElapsedSince(cl.lastReadAt) - let pos = cl.lastPosition.flatMap { ReadingPositionAdapter.fromValue($0) } - return .continueSession(materialId: materialId, filePath: resolved.filePath, materialType: resolved.materialType, kbTitle: kbTitle, elapsed: elapsed, resumePosition: pos) + return .continueSession(materialId: materialId, filePath: resolved.filePath, materialType: resolved.materialType, kbTitle: kbTitle, elapsed: elapsed, resumePosition: nil) } if let unfinished = sessions @@ -186,8 +189,7 @@ final class StudyHomeViewModel: ObservableObject { .first { let kbTitle = knowledgeBases.first(where: { $0.id == unfinished.knowledgeBaseId })?.title ?? "学习" let elapsed = formatElapsedSince(unfinished.startedAt) - let mt: MaterialType = unfinished.readingTargetType == "knowledge_source" ? .unknown : .unknown - return .continueSession(materialId: unfinished.materialId ?? "", filePath: "", materialType: mt, kbTitle: kbTitle, elapsed: elapsed, resumePosition: nil) + return .continueSession(materialId: "", filePath: "", materialType: .unknown, kbTitle: kbTitle, elapsed: elapsed, resumePosition: nil) } if !dueCards.isEmpty { diff --git a/AIStudyApp/AIStudyAppTests/MaterialDetailViewModelTests.swift b/AIStudyApp/AIStudyAppTests/MaterialDetailViewModelTests.swift index d8111c3..14e87ba 100644 --- a/AIStudyApp/AIStudyAppTests/MaterialDetailViewModelTests.swift +++ b/AIStudyApp/AIStudyAppTests/MaterialDetailViewModelTests.swift @@ -10,7 +10,7 @@ private final class MockKnowledgeBaseService: KnowledgeBaseServicing { private final class MockKnowledgeItemService: KnowledgeItemServicing { var items: [KnowledgeItem] = [] - func list(knowledgeBaseId: String, sortBy: String?, order: String?) async throws -> [KnowledgeItem] { items } + func listAll(knowledgeBaseId: String) async throws -> [KnowledgeItem] { items } } private final class MockQuizService: QuizServicing { diff --git a/AIStudyApp/AIStudyAppTests/StudyHomeViewModelTests.swift b/AIStudyApp/AIStudyAppTests/StudyHomeViewModelTests.swift index 1542ff3..f35bf7d 100644 --- a/AIStudyApp/AIStudyAppTests/StudyHomeViewModelTests.swift +++ b/AIStudyApp/AIStudyAppTests/StudyHomeViewModelTests.swift @@ -5,7 +5,7 @@ import XCTest private final class MockSessionService: SessionServicing { var sessions: [LearningSession] = [] - func list() async throws -> [LearningSession] { sessions } + func listAll() async throws -> [LearningSession] { sessions } } private final class MockReviewService: ReviewServicing { @@ -20,7 +20,7 @@ private final class MockQuizListService: QuizListServicing { private final class MockKBListService: KBListServicing { var kbs: [KnowledgeBase] = [] - func list() async throws -> [KnowledgeBase] { kbs } + func listAll() async throws -> [KnowledgeBase] { kbs } } private final class MockActivityHomeService: ActivityHomeServicing {