From 2f6c2d95579953a8d1a049d5b3ff15a4b23f1a6c Mon Sep 17 00:00:00 2001 From: empty Date: Sun, 8 Feb 2026 00:43:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E8=AF=8A=E6=96=AD=E5=8C=85=E7=82=B9=E5=87=BB=E5=90=8E=E9=BB=91?= =?UTF-8?q?=E5=B1=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 .sheet(isPresented:) + if let 改为 .sheet(item:) 模式, 消除 feedbackPackageURL 与 showingShareSheet 的状态时序竞争。 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../to-live-photo/Views/SettingsView.swift | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/to-live-photo/to-live-photo/Views/SettingsView.swift b/to-live-photo/to-live-photo/Views/SettingsView.swift index f261751..51731af 100644 --- a/to-live-photo/to-live-photo/Views/SettingsView.swift +++ b/to-live-photo/to-live-photo/Views/SettingsView.swift @@ -13,8 +13,7 @@ struct SettingsView: View { @State private var cacheSize: String = String(localized: "common.calculating") @State private var showingClearCacheAlert = false @State private var showingClearRecentWorksAlert = false - @State private var feedbackPackageURL: URL? - @State private var showingShareSheet = false + @State private var feedbackPackageURL: IdentifiableURL? @State private var showingLanguageChangeAlert = false @State private var showingFeedbackConfirmAlert = false @State private var pendingLanguage: LanguageManager.Language? @@ -182,10 +181,8 @@ struct SettingsView: View { } message: { Text(String(localized: "settings.feedbackConfirmMessage")) } - .sheet(isPresented: $showingShareSheet) { - if let url = feedbackPackageURL { - ShareSheet(activityItems: [url]) - } + .sheet(item: $feedbackPackageURL) { item in + ShareSheet(activityItems: [item.url]) } } @@ -299,8 +296,7 @@ struct SettingsView: View { let url = await createFeedbackPackage() await MainActor.run { if let url { - feedbackPackageURL = url - showingShareSheet = true + feedbackPackageURL = IdentifiableURL(url: url) } } } @@ -425,6 +421,12 @@ extension PHAuthorizationStatus: @retroactive CustomStringConvertible { } } +// MARK: - Identifiable URL Wrapper +struct IdentifiableURL: Identifiable { + let id = UUID() + let url: URL +} + // MARK: - Share Sheet struct ShareSheet: UIViewControllerRepresentable { let activityItems: [Any]