58 lines
1.7 KiB
Swift
58 lines
1.7 KiB
Swift
import SwiftUI
|
||
|
||
/// 上传状态
|
||
public enum UploadStatus: Equatable {
|
||
case idle
|
||
case uploading(progress: Double)
|
||
case success
|
||
case failure(Error)
|
||
|
||
public var isUploading: Bool {
|
||
if case .uploading = self { return true }
|
||
return false
|
||
}
|
||
|
||
public var progress: Double {
|
||
if case let .uploading(progress) = self { return progress }
|
||
return 0
|
||
}
|
||
|
||
public static func == (lhs: UploadStatus, rhs: UploadStatus) -> Bool {
|
||
switch (lhs, rhs) {
|
||
case (.idle, .idle):
|
||
return true
|
||
case let (.uploading(lhsProgress), .uploading(rhsProgress)):
|
||
// 使用近似比较来处理浮点数的精度问题
|
||
return abs(lhsProgress - rhsProgress) < 0.001
|
||
case (.success, .success):
|
||
return true
|
||
case (.failure, .failure):
|
||
// 对于错误类型,我们简单地认为它们不相等,因为比较 Error 对象比较复杂
|
||
// 如果需要更精确的比较,可以在这里添加具体实现
|
||
return false
|
||
default:
|
||
return false
|
||
}
|
||
}
|
||
}
|
||
|
||
/// 上传结果
|
||
public struct UploadResult: Identifiable, Equatable {
|
||
public let id = UUID()
|
||
public var fileId: String
|
||
public var previewFileId: String
|
||
public let image: UIImage
|
||
public var status: UploadStatus = .idle
|
||
|
||
public init(fileId: String = "", previewFileId: String = "", image: UIImage, status: UploadStatus = .idle) {
|
||
self.fileId = fileId
|
||
self.previewFileId = previewFileId
|
||
self.image = image
|
||
self.status = status
|
||
}
|
||
|
||
public static func == (lhs: UploadResult, rhs: UploadResult) -> Bool {
|
||
lhs.id == rhs.id
|
||
}
|
||
}
|