# Swift开发-Swift项目中常用到扩展(Extensio
2017-07-31 本文已影响340人
190CM
前言:
Swift开发中经常会要自定义部分函数方便自己几种精力开发项目核心代码,减少重复的冗余的代码书写,这便是我常用到的扩展例如:字符串长度 加密等等,方便大家拿来即用!
因为我本身使用的扩展并不是很多也没有写很多这里离为大家提供一个第三方的扩展库EZSwiftExtensions
如果您觉得对您有用请帮我点个赞👍
1.自定义Log
public func DDLog<T>(_ messsage : T, file : String = #file, funcName : String = #function, lineNum : Int = #line) {
#if DEBUG
let fileName = (file as NSString).lastPathComponent
print("\n\(fileName):(\(lineNum))-\(messsage)")
#endif
}
2.String
// MARK:- length
var length: Int {
return self.lengthOfBytes(using: .utf8)
}
var count: Int {
return self.characters.count
}
// MARK:- md5
var md5: String {
let str = self.cString(using: String.Encoding.utf8)
let strLen = CUnsignedInt(self.lengthOfBytes(using: String.Encoding.utf8))
let digestLen = Int(CC_MD5_DIGEST_LENGTH)
let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)
CC_MD5(str!, strLen, result)
let hash = NSMutableString()
for i in 0 ..< digestLen {
hash.appendFormat("%02x", result[i])
}
result.deinitialize()
return String(format: hash as String)
}
// MARK:- json转字典
var toDict: [String: Any?]? {
var json = self
if json.contains("\\") {
json = json.components(separatedBy: "\\").joined()
}
if let data = json.data(using: .utf8) {
do {
let array = try JSONSerialization.jsonObject(with: data, options: [JSONSerialization.ReadingOptions.init(rawValue: 0)]) as? Array<[String: Any]>
guard let dict = array?.first else {
return nil
}
return dict
} catch let error {
DDLog(error)
}
}
return nil
}
// MARK:- json转数组
var toArray: [[String: Any]]? {
var json = self
if json.contains("\\") {
json = json.components(separatedBy: "\\").joined()
}
if let data = json.data(using: .utf8) {
do {
let array = try JSONSerialization.jsonObject(with: data, options: [JSONSerialization.ReadingOptions.init(rawValue: 0)]) as? [[String: Any]]
return array
} catch let error {
DDLog(error)
}
}
return nil
}
// MARK:- 获取字符串高度
func getHeigh(font: CGFloat, width: CGFloat) -> CGFloat {
let statusLabelText: String = self
let size = CGSize(width: width, height: 900)
let dic = NSDictionary(object: UIFont.systemFont(ofSize: font), forKey: NSFontAttributeName as NSCopying)
let strSize = statusLabelText.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: dic as? [String : AnyObject], context:nil).size
return strSize.height
}
// MARK:- 获取字符串宽度
func getWidth(font: CGFloat, height: CGFloat) -> CGFloat {
let statusLabelText: String = self
let size = CGSize(width: 900, height: height)
let dic = NSDictionary(object: UIFont.systemFont(ofSize: font), forKey: NSFontAttributeName as NSCopying)
let strSize = statusLabelText.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: dic as? [String : AnyObject], context:nil).size
return strSize.width
}
3.Date
// MARK:- 获取当前时间
static func currentDate(format: String) -> String {
let currentdate = Date()
let dateformatter = DateFormatter()
dateformatter.dateFormat = format
let customDate = dateformatter.string(from: currentdate)
return customDate
}
static func date(dateStr: String) -> Date {
let dateformatter = DateFormatter()
dateformatter.dateFormat = "YYYY-MM-dd HH:mm:ss"
guard let newDate = dateformatter.date(from: dateStr) else {
return Date()
}
return newDate
}
static func date(num: Int, format: String) -> String {
let timeInterval:TimeInterval = TimeInterval(num / 1000)
let date = Date(timeIntervalSince1970: timeInterval)
let dateformatter = DateFormatter()
dateformatter.dateFormat = format
return dateformatter.string(from: date)
}
4.Color
// MARK:- 16进制颜色
static func colorWithHex(hex: String) -> UIColor {
var cString = hex.trimmingCharacters(in:CharacterSet.whitespacesAndNewlines).uppercased()
if (cString.hasPrefix("#")) {
let index = cString.index(cString.startIndex, offsetBy:1)
cString = cString.substring(from: index)
}
if (cString.characters.count != 6) {
return UIColor.red
}
let rIndex = cString.index(cString.startIndex, offsetBy: 2)
let rString = cString.substring(to: rIndex)
let otherString = cString.substring(from: rIndex)
let gIndex = otherString.index(otherString.startIndex, offsetBy: 2)
let gString = otherString.substring(to: gIndex)
let bIndex = cString.index(cString.endIndex, offsetBy: -2)
let bString = cString.substring(from: bIndex)
var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
Scanner(string: rString).scanHexInt32(&r)
Scanner(string: gString).scanHexInt32(&g)
Scanner(string: bString).scanHexInt32(&b)
return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
}
5.Dictionary
// MARK:- 字典转json
var toJson: String {
if (!JSONSerialization.isValidJSONObject(self)) {
print("无法解析出JSONString")
return ""
}
let data : NSData! = try? JSONSerialization.data(withJSONObject: self, options: []) as NSData!
let JSONString = NSString(data:data as Data,encoding: String.Encoding.utf8.rawValue)
return JSONString! as String
}
6.Array
// MARK:- 数组转json
var toJson: String {
if (!JSONSerialization.isValidJSONObject(self)) {
print("无法解析出JSONString")
return ""
}
let data : NSData! = try? JSONSerialization.data(withJSONObject: self, options: []) as NSData!
let JSONString = NSString(data:data as Data,encoding: String.Encoding.utf8.rawValue)
return JSONString! as String
}
7.AppInfo
static let infoDictionary = Bundle.main.infoDictionary
//App 名称
static let appDisplayName: String = Bundle.main.infoDictionary!["CFBundleDisplayName"] as! String
// Bundle Identifier
static let bundleIdentifier:String = Bundle.main.bundleIdentifier!
// App 版本号
static let appVersion:String = Bundle.main.infoDictionary! ["CFBundleShortVersionString"] as! String
//Bulid 版本号
static let buildVersion : String = Bundle.main.infoDictionary! ["CFBundleVersion"] as! String
//ios 版本
static let iOSVersion: String = UIDevice.current.systemVersion
//设备 udid
static let identifierNumber = UIDevice.current.identifierForVendor!.uuidString
//设备名称
static let systemName = UIDevice.current.systemName
// 设备型号
static let model = UIDevice.current.model
//设备区域化型号
static let localizedModel = UIDevice.current.localizedModel
8.常用的正则
import Foundation
enum Validate {
case email(_: String) // 邮箱
case phoneNum(_: String) // 手机
case carNum(_: String) // 车牌号
case username(_: String) // 登录名
case password(_: String) // 密码
case nickname(_: String) // 昵称
case URL(_: String) // 网址
case IP(_: String) // ip
case idCard(_: String) // 身份证号
case numbers(_: String) // 只包含数字
case lettersAndNumbers(_: String) // 只包含字母和数字
case chinese(_: String) // 中文
var isRight: Bool {
var predicateStr:String!
var currObject:String!
switch self {
case let .email(str):
predicateStr = "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$"
currObject = str
case let .phoneNum(str):
predicateStr = "^1(3[4-9]|4[7]|5[0-27-9]|7[08]|8[2-478])\\d{8}$" currObject = str
case let .carNum(str):
predicateStr = "^[A-Za-z]{1}[A-Za-z_0-9]{5}$"
currObject = str
case let .username(str):
predicateStr = "^[A-Za-z0-9]{6,20}+$"
currObject = str
case let .password(str):
predicateStr = "^[a-zA-Z0-9]{6,12}+$"
currObject = str
case let .nickname(str):
predicateStr = "^[\\u4e00-\\u9fa5]{4,8}$"
currObject = str
case let .URL(str):
predicateStr = "^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$"
currObject = str
case let .IP(str):
predicateStr = "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"
currObject = str
case let .idCard(str):
predicateStr = "(^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}$)"
currObject = str
case let .numbers(str):
predicateStr = "^[0-9]+$"
currObject = str
case let .lettersAndNumbers(str):
predicateStr = "^[a-zA-Z0-9]{1,30}+$"
currObject = str
case let .chinese(str):
predicateStr = "^[\\u4e00-\\u9fa5]{0,100}$"
currObject = str
}
let predicate = NSPredicate(format: "SELF MATCHES %@" ,predicateStr)
return predicate.evaluate(with: currObject)
}
}
9.其他常用
// block
typealias CommonBlock = (_ result: Any?) -> ()
// 屏幕宽高
let kWidth = UIScreen.main.bounds.width
let kHeight = UIScreen.main.bounds.height
// AppDelegate
let RootAppdelegate = (UIApplication.shared.delegate) as! AppDelegate
// 比例计算
func Scale(num: Int) -> CGFloat {
return UIScreen.main.bounds.width / 375.0 * CGFloat(num)
}
// 设置字体(也可以在这里适配字体)
func font(size: CGFloat) -> UIFont {
return UIFont.systemFont(ofSize: size)
}
// 设置16进制颜色
func color(hex: String) -> UIColor {
return UIColor.colorWithHex(hex: hex)
}