新增景区排队管理功能
This commit is contained in:
@ -0,0 +1,55 @@
|
||||
//
|
||||
// ScenicQueueQRCodeSaver.swift
|
||||
// suixinkan
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Photos
|
||||
import UIKit
|
||||
|
||||
/// 排队二维码保存服务。
|
||||
enum ScenicQueueQRCodeSaver {
|
||||
/// 下载二维码图片并保存到系统相册。
|
||||
static func saveImage(from urlString: String) async throws {
|
||||
guard let url = URL(string: urlString) else {
|
||||
throw ScenicQueueQRCodeSaverError.invalidURL
|
||||
}
|
||||
let (data, _) = try await URLSession.shared.data(from: url)
|
||||
guard let image = UIImage(data: data) else {
|
||||
throw ScenicQueueQRCodeSaverError.invalidImage
|
||||
}
|
||||
try await saveToPhotoLibrary(image)
|
||||
}
|
||||
|
||||
private static func saveToPhotoLibrary(_ image: UIImage) async throws {
|
||||
let status = PHPhotoLibrary.authorizationStatus(for: .addOnly)
|
||||
if status == .notDetermined {
|
||||
_ = await PHPhotoLibrary.requestAuthorization(for: .addOnly)
|
||||
}
|
||||
guard PHPhotoLibrary.authorizationStatus(for: .addOnly) == .authorized
|
||||
|| PHPhotoLibrary.authorizationStatus(for: .addOnly) == .limited else {
|
||||
throw ScenicQueueQRCodeSaverError.denied
|
||||
}
|
||||
try await PHPhotoLibrary.shared().performChanges {
|
||||
PHAssetChangeRequest.creationRequestForAsset(from: image)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 排队二维码保存错误。
|
||||
enum ScenicQueueQRCodeSaverError: LocalizedError {
|
||||
case invalidURL
|
||||
case invalidImage
|
||||
case denied
|
||||
|
||||
var errorDescription: String? {
|
||||
switch self {
|
||||
case .invalidURL:
|
||||
"服务端返回的二维码地址无效"
|
||||
case .invalidImage:
|
||||
"下载或保存二维码失败,请检查网络与存储权限"
|
||||
case .denied:
|
||||
"未授予权限,无法将小程序码保存到相册"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user