feat: 添加云盘与消息中心功能
This commit is contained in:
62
suixinkan/UI/CloudDrive/CloudDriveFormatter.swift
Normal file
62
suixinkan/UI/CloudDrive/CloudDriveFormatter.swift
Normal file
@ -0,0 +1,62 @@
|
||||
//
|
||||
// CloudDriveFormatter.swift
|
||||
// suixinkan
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
/// 云盘展示格式化工具。
|
||||
enum CloudDriveFormatter {
|
||||
/// 文件类型名称。
|
||||
static func typeName(_ type: Int) -> String {
|
||||
switch type {
|
||||
case 1:
|
||||
"视频"
|
||||
case 2:
|
||||
"图片"
|
||||
case 99:
|
||||
"文件夹"
|
||||
default:
|
||||
"文件"
|
||||
}
|
||||
}
|
||||
|
||||
/// 文件描述。
|
||||
static func fileDescription(_ file: CloudFile) -> String {
|
||||
if file.isFolder {
|
||||
return "\(file.childNum) 个项目"
|
||||
}
|
||||
return "\(typeName(file.type)) \(fileSize(file.fileSize))"
|
||||
}
|
||||
|
||||
/// 文件大小展示。
|
||||
static func fileSize(_ bytes: Int64) -> String {
|
||||
guard bytes > 0 else { return "0B" }
|
||||
let units = ["B", "KB", "MB", "GB", "TB"]
|
||||
var value = Double(bytes)
|
||||
var index = 0
|
||||
while value >= 1024, index < units.count - 1 {
|
||||
value /= 1024
|
||||
index += 1
|
||||
}
|
||||
if index == 0 {
|
||||
return "\(Int(value))\(units[index])"
|
||||
}
|
||||
return String(format: "%.1f%@", value, units[index])
|
||||
}
|
||||
|
||||
/// URL 或文件名的后缀。
|
||||
static func fileExtension(_ value: String) -> String {
|
||||
let ext = URL(string: value)?.pathExtension ?? URL(fileURLWithPath: value).pathExtension
|
||||
return ext.isEmpty ? typeName(0) : ext.uppercased()
|
||||
}
|
||||
}
|
||||
|
||||
/// 云盘 Android 同名图片资源访问工具。
|
||||
enum CloudDriveAsset {
|
||||
/// 返回云盘图片资源,缺失时使用系统图标兜底。
|
||||
static func image(named name: String, fallbackSystemName: String) -> UIImage? {
|
||||
UIImage(named: name)?.withRenderingMode(.alwaysOriginal) ?? UIImage(systemName: fallbackSystemName)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user