# onChange iOS 17 迁移总结 ## 概述 将项目中所有使用已弃用的 `onChange(of:perform:)` API 的代码修改为 iOS 17 建议的新用法。 ## 修改内容 ### 修改规则 - **旧用法**: `onChange(of: value) { newValue in ... }` - **新用法**: `onChange(of: value) { oldValue, newValue in ... }` ### 修改的文件列表 1. **LoginView.swift** - 3处修改 - `store.isAnyLoginCompleted` 监听 - `showIDLogin` 监听 - `showEmailLogin` 监听 2. **MainView.swift** - 3处修改 - `store.isLoggedOut` 监听 - `path` 监听 - `store.navigationPath` 监听 3. **EMailLoginView.swift** - 4处修改 - `store.loginStep` 监听 - `email` 监听 - `verificationCode` 监听 - `store.isCodeLoading` 监听 4. **RecoverPasswordView.swift** - 4处修改 - `email` 监听 - `verificationCode` 监听 - `newPassword` 监听 - `store.isResetSuccess` 监听 5. **ImagePickerWithPreviewView.swift** - 2处修改 - `viewStore.inner.isLoading` 监听 - `viewStore.inner.selectedPhotoItems` 监听 6. **EditFeedView.swift** - 1处修改 - `store.shouldDismiss` 监听 7. **DetailView.swift** - 1处修改 - `store.shouldDismiss` 监听 8. **MeView.swift** - 1处修改 - `detailStore.shouldDismiss` 监听 9. **IDLoginView.swift** - 1处修改 - `store.loginStep` 监听 10. **ContentView.swift** - 1处修改 - `selectedLogLevel` 监听 ## 总计 - **修改文件数**: 10个 - **修改处数**: 20处 - **状态**: ✅ 完成 ## 验证结果 通过 grep 搜索确认所有 `onChange(of:perform:)` 调用都已成功迁移到新 API。 ## 注意事项 1. 新 API 提供了 `oldValue` 和 `newValue` 两个参数 2. 在大多数情况下,我们只使用了 `newValue` 参数,`oldValue` 用 `_` 忽略 3. 所有原有逻辑保持不变,只是 API 调用方式更新 4. 修改后的代码完全兼容 iOS 17+ 的要求