从 iOS 17 Observation 迁移至 iOS 16 兼容的 Combine 架构
将最低部署版本降至 iOS 16,以 ObservableObject 替换 @Observable,新增导航与 UI 兼容层,并补充登录冒烟 UI 测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -6,22 +6,21 @@
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Observation
|
||||
import Combine
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 直播管理 ViewModel,负责直播列表、详情、创建和控制动作。
|
||||
final class LiveManagementViewModel {
|
||||
var items: [LiveEntity] = []
|
||||
var detail: LiveEntity?
|
||||
var loading = false
|
||||
var loadingMore = false
|
||||
var hasMore = false
|
||||
var page = 1
|
||||
var errorMessage: String?
|
||||
final class LiveManagementViewModel: ObservableObject {
|
||||
@Published var items: [LiveEntity] = []
|
||||
@Published var detail: LiveEntity?
|
||||
@Published var loading = false
|
||||
@Published var loadingMore = false
|
||||
@Published var hasMore = false
|
||||
@Published var page = 1
|
||||
@Published var errorMessage: String?
|
||||
|
||||
@ObservationIgnored private let pageSize = 10
|
||||
@ObservationIgnored private var total = 0
|
||||
private let pageSize = 10
|
||||
@Published private var total = 0
|
||||
|
||||
/// 进行中的直播数量。
|
||||
var liveRunningCount: Int {
|
||||
@ -136,13 +135,12 @@ final class LiveManagementViewModel {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 直播详情 ViewModel,负责直播详情页动作后的详情刷新。
|
||||
final class LiveDetailViewModel {
|
||||
var detail: LiveEntity
|
||||
var loading = false
|
||||
var actionInFlight = false
|
||||
var errorMessage: String?
|
||||
final class LiveDetailViewModel: ObservableObject {
|
||||
@Published var detail: LiveEntity
|
||||
@Published var loading = false
|
||||
@Published var actionInFlight = false
|
||||
@Published var errorMessage: String?
|
||||
|
||||
init(detail: LiveEntity) {
|
||||
self.detail = detail
|
||||
@ -192,20 +190,19 @@ final class LiveDetailViewModel {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 直播相册 ViewModel,负责相册列表、筛选、新建和删除。
|
||||
final class LiveAlbumViewModel {
|
||||
var folders: [LiveAlbumFolderItem] = []
|
||||
var startDate: Date?
|
||||
var endDate: Date?
|
||||
var loading = false
|
||||
var loadingMore = false
|
||||
var hasMore = false
|
||||
var page = 1
|
||||
var errorMessage: String?
|
||||
final class LiveAlbumViewModel: ObservableObject {
|
||||
@Published var folders: [LiveAlbumFolderItem] = []
|
||||
@Published var startDate: Date?
|
||||
@Published var endDate: Date?
|
||||
@Published var loading = false
|
||||
@Published var loadingMore = false
|
||||
@Published var hasMore = false
|
||||
@Published var page = 1
|
||||
@Published var errorMessage: String?
|
||||
|
||||
@ObservationIgnored private let pageSize = 10
|
||||
@ObservationIgnored private var total = 0
|
||||
private let pageSize = 10
|
||||
@Published private var total = 0
|
||||
|
||||
/// 设置开始时间并校验时间顺序。
|
||||
func setStartDate(_ date: Date) throws {
|
||||
@ -301,14 +298,13 @@ final class LiveAlbumViewModel {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 新建直播相册 ViewModel,负责本地素材上传和创建相册。
|
||||
final class LiveAlbumCreateViewModel {
|
||||
var name = ""
|
||||
var localFiles: [LiveAlbumLocalUploadFile] = []
|
||||
var submitting = false
|
||||
var uploadProgress = 0
|
||||
var errorMessage: String?
|
||||
final class LiveAlbumCreateViewModel: ObservableObject {
|
||||
@Published var name = ""
|
||||
@Published var localFiles: [LiveAlbumLocalUploadFile] = []
|
||||
@Published var submitting = false
|
||||
@Published var uploadProgress = 0
|
||||
@Published var errorMessage: String?
|
||||
|
||||
/// 添加本地待上传素材。
|
||||
func addLocalFiles(_ files: [LiveAlbumLocalUploadFile]) {
|
||||
@ -368,15 +364,14 @@ final class LiveAlbumCreateViewModel {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 直播相册预览 ViewModel,负责加载相册详情和删除当前素材。
|
||||
final class LiveAlbumPreviewViewModel {
|
||||
final class LiveAlbumPreviewViewModel: ObservableObject {
|
||||
let folderId: Int
|
||||
var folder: LiveAlbumFolderItem?
|
||||
var files: [LiveAlbumFileItem] = []
|
||||
var currentIndex: Int
|
||||
var loading = false
|
||||
var errorMessage: String?
|
||||
@Published var folder: LiveAlbumFolderItem?
|
||||
@Published var files: [LiveAlbumFileItem] = []
|
||||
@Published var currentIndex: Int
|
||||
@Published var loading = false
|
||||
@Published var errorMessage: String?
|
||||
|
||||
init(folderId: Int, startIndex: Int = 0, summary: LiveAlbumFolderItem? = nil) {
|
||||
self.folderId = folderId
|
||||
|
||||
Reference in New Issue
Block a user