IOS_Boss/IOS_study/Extension/Foundation+.swift
2025-07-27 12:33:06 +08:00

95 lines
3.1 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Foundation+.swift
//
//
// Created by CC-star on 2025/6/29.
//
import Foundation
//1,10\d(\\d -> \ -> \d)
let kPhoneRegEx = "^1\\d{10}$"//
let kVerCodeRegEx = "^\\d{6}$"//
extension NSRegularExpression {
convenience init(_ pattern: String) {
do {
try self.init(pattern: pattern)
} catch {
fatalError("非法的正则表达式")//init
}
}
func matches(_ string: String) -> Bool {
let range = NSRange(location: 0, length: string.utf16.count)
return firstMatch(in: string, options: [], range: range) != nil
}
}
extension String {
var isBlank: Bool { self.isEmpty || self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty }//
var trimmed: String { self.trimmingCharacters(in: .whitespacesAndNewlines) }
var isPhoneNum: Bool {
Int(self) != nil && NSRegularExpression(kPhoneRegEx).matches(self)
//int nor ->
}
var isVerCode: Bool { Int(self) != nil && NSRegularExpression(kVerCodeRegEx).matches(self) }
//
static func randomString(_ length: Int) -> String{
let letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
return String((0..<length).map{ _ in letters.randomElement()! })
}
}
extension Date {
var daysFromNow: Int {
Calendar.current.dateComponents([.day], from: self, to: .now).day ?? 0//??
}
// let date = Date()
// print(date.string(withFormat: "yyyy/MM/dd HH:mm")) // 2023/08/24 16:21
// print(date.string(withFormat: "yyyy/MM/dd hh:mm")) // 2023/08/24 04:21
var toStr: String {
let year = Calendar.current.component(.year, from: self)
let currentYear = Calendar.current.component(.year, from: Date())
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = (year == currentYear) ? "M-d" : "yyyy-M-d"
return dateFormatter.string(from: self)
}
}
enum UserError: String, Error {
case lcObjToDicError = "lc对象转换字典失败"
case saveFileSuccessButNoURL = "保存文件成功,但未能获取文件的地址"
case imageToheicDataError = "图片转换成heicData失败"
case imageTooBig = "图片太大"
case objectIdNotFound = "没找到objectId"
}
enum NetworkError: Error {
case invalidURL
case notHTTPResponse
case requestFailed(String)//
}
extension NetworkError: LocalizedError {//NetworkError
var errorDescription: String? {
switch self {
case .invalidURL:
return "请求的网址错误"
case .notHTTPResponse:
return "响应不能转化为HTTPURLResponse"
case .requestFailed(let errorMsg):
return "请求失败:\(errorMsg)"
}
}
}
extension Notification.Name {
static let loginSuccess = Notification.Name("loginSuccess")
static let logoutSuccess = Notification.Name("logoutSuccess")
}