// // Define.swift // GeLiLaiGeWan // // Created by geli on 2018/6/22. // Copyright © 2018年 geli. All rights reserved. // /* 来个碗Apple开发者账号、密码: dev@laigewan.com 81338860^geLi 下载链接: https://itunes.apple.com/cn/app/id1428195489?mt=8 */ import UIKit import SwiftDate //日期处理库 import SwiftyJSON //版本号 let systemVersion = (UIDevice.current.systemVersion as String) //let UserId = ((UserDefaults.standard.string(forKey: "user_id") != nil) ? (UserDefaults.standard.string(forKey: "user_id")) : "") as! String //let IsHavUserId = (UserId.count != 0) //接口地址 //test let SERVERCE_ImageHost = "https://z.gelifood.com/" let SERVERCE_HOST = "https://z.gelifood.com/admin/" //let SERVERCE_ImageHost = "https://zx.gelifood.com/" //let SERVERCE_HOST = "https://zx.gelifood.com/admin/" ////online //视图常量 let IS_IPHONE_X = __CGSizeEqualToSize(CGSize(width: 375.0, height: 812.0),UIScreen.main.bounds.size ) || __CGSizeEqualToSize(CGSize(width: 812.0, height: 375.0),UIScreen.main.bounds.size)||__CGSizeEqualToSize(CGSize(width: 414.0, height: 896.0),UIScreen.main.bounds.size ) || __CGSizeEqualToSize(CGSize(width: 896.0, height: 414.0),UIScreen.main.bounds.size) let glscale = UIScreen.main.bounds.size.width/375 let fullScreenWidth = UIScreen.main.bounds.width //屏幕高度 let fullScreenHeight = UIScreen.main.bounds.height //屏幕宽度 let NavHeight = (IS_IPHONE_X ? 88 : 64) let TabHeight = (IS_IPHONE_X ? 83 : 49) let NavCGRect = CGRect(x: 0, y: 0, width: Int(UIScreen.main.bounds.size.width), height: NavHeight) let LoopHeight = UIScreen.main.bounds.size.width / 1.25 func SetTopFrameView(view:UIView,btmView:UIView){ view.snp.makeConstraints { (make) in make.top.equalTo(NavCGRect.height) make.right.left.equalTo(0) make.bottom.equalTo(btmView.snp_top) } } func SetTopFrame(view:UIView,height:CGFloat){ view.snp.makeConstraints { (make) in make.top.equalTo(NavCGRect.height) make.right.left.equalTo(0) make.height.equalTo(height) } } func IsOldIos() ->Bool{ if #available(iOS 11.0, *){ return false }else{ return true } } func x(object: UIView) ->CGFloat { return object.frame.origin.x } func y(object: UIView) -> CGFloat { return object.frame.origin.y } func width(object: UIView) -> CGFloat { return object.frame.size.width } func height(object: UIView) -> CGFloat { return object.frame.size.height } func centerX(object: UIView) -> CGFloat { return object.center.x } func centerY(object: UIView) -> CGFloat { return object.center.y } func setFont(_ size:CGFloat) -> UIFont{ return UIFont.boldSystemFont(ofSize: size) } func setColor(red:CGFloat,green:CGFloat,blue:CGFloat)->UIColor{ return UIColor(red: red/255, green: green/255, blue: blue/255, alpha: 1) } func isPurnFloat(string: String) -> Bool { let scan: Scanner = Scanner(string: string) var val:Float = 0 return scan.scanFloat(&val) && scan.isAtEnd } func isPurnInt(string: String) -> Bool { let scan: Scanner = Scanner(string: string) var val:Int = 0 return scan.scanInt(&val) && scan.isAtEnd } //MARK:--是否是正确的数值 func isPurnNumber(str:String)-> Bool{ // let expression = "^[0-9]*((\\.|,)[0-9]{0,2})?$" let arr = str.components(separatedBy: ",") if arr.count > 0 { var num = "" for item in arr{ num += item } if num.count > 0 { var predicateStr:String! var currObject:String! predicateStr = "^[0-9]*((\\.|,)[0-9]{0,2})?$" currObject = num let predicate = NSPredicate(format: "SELF MATCHES %@" ,predicateStr) return predicate.evaluate(with: currObject) } if isPurnInt(string: num) || isPurnFloat(string: num){ return true }else{ return false } }else{ if str.count > 0 { var predicateStr:String! var currObject:String! predicateStr = "^[0-9]*((\\.|,)[0-9]{0,2})?$" currObject = str let predicate = NSPredicate(format: "SELF MATCHES %@" ,predicateStr) return predicate.evaluate(with: currObject) } if isPurnInt(string: str) || isPurnFloat(string: str){ return true }else{ return false } } } //RGB func RGB(r:CGFloat,g:CGFloat,b:CGFloat)->UIColor{ return UIColor(red: r/255.0, green: g/255.0, blue: b/255.0, alpha: 1) } //MARK:--是否手机号码 func isTelNumber(num:NSString)->Bool { var mobile = "^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$" var CM = "^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$" var CU = "^1(3[0-2]|5[256]|8[56])\\d{8}$" var CT = "^1((33|53|8[09])[0-9]|349)\\d{7}$" var regextestmobile = NSPredicate(format: "SELF MATCHES %@",mobile) var regextestcm = NSPredicate(format: "SELF MATCHES %@",CM ) var regextestcu = NSPredicate(format: "SELF MATCHES %@" ,CU) var regextestct = NSPredicate(format: "SELF MATCHES %@" ,CT) if ((regextestmobile.evaluate(with: num) == true) || (regextestcm.evaluate(with: num) == true) || (regextestct.evaluate(with: num) == true) || (regextestcu.evaluate(with: num) == true)) { return true } else { return false } } func stringToTimeStamp(stringTime:Int)->String { let interval = TimeInterval(stringTime) let date = NSDate(timeIntervalSince1970: interval) // 格式化输出 let dateFormatter = DateFormatter() dateFormatter.dateFormat = " yyyy-MM-dd HH:mm:ss" let nowDate = dateFormatter.string(from: date as Date) return nowDate } //MARK:--是否是邮箱 func isMailBox(mail_ad:String) -> Bool { let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" let emailTest = NSPredicate.init(format: "SELF MATCHES %@", emailRegex) return emailTest.evaluate(with: mail_ad) } extension String { var containsEmoji: Bool { for scalar in unicodeScalars { switch scalar.value { case 0x00A0...0x00AF, 0x2030...0x204F, 0x2120...0x213F, 0x2190...0x21AF, 0x2310...0x329F, 0x1F000...0x1F9CF: return true default: continue } } return false } } extension UIViewController { class func currentViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { if let nav = base as? UINavigationController { return currentViewController(base: nav.visibleViewController) } if let tab = base as? UITabBarController { return currentViewController(base: tab.selectedViewController) } if let presented = base?.presentedViewController { return currentViewController(base: presented) } return base } } //MARK:--根据开始位置和长度截取字符串 extension String { func subString(start:Int, length:Int = -1) -> String { var len = length if len == -1 { len = self.count - start } let st = self.index(startIndex, offsetBy:start) let en = self.index(st, offsetBy:len) return String(self[st ..< en]) } } //MARK:--根据整数返回字符串 func StringByInt(number:Int) -> String { let num = NSNumber(value: number) let str = NumberFormatter.localizedString(from: num, number: .none) return str } //MARK: 创建一个日期格式器 func TimeByDouble (sender : Double ) -> String { let timeInterval:TimeInterval = TimeInterval(sender) let data : Date = Date(timeIntervalSince1970: timeInterval) let dformatter = DateFormatter() dformatter.dateFormat = "yyyy.MM.dd HH:mm:ss" return dformatter.string(from: data) } func dayByDouble (sender : Double ) -> String { let timeInterval:TimeInterval = TimeInterval(sender) let data : Date = Date(timeIntervalSince1970: timeInterval) let dformatter = DateFormatter() dformatter.dateFormat = "yyyy.MM.dd" return dformatter.string(from: data) } func dayAndTimeByDouble (sender : Double ) -> String { let timeInterval:TimeInterval = TimeInterval(sender) let data : Date = Date(timeIntervalSince1970: timeInterval) let dformatter = DateFormatter() dformatter.dateFormat = "yyyy.MM.dd HH:mm" return dformatter.string(from: data) } func dateConvertString(date:Date, dateFormat:String="yyyy-MM-dd") -> String { let timeZone = TimeZone.init(identifier: "UTC") let formatter = DateFormatter() formatter.timeZone = timeZone // formatter.locale = Locale.init(identifier: "zh_CN") formatter.dateFormat = dateFormat let date = formatter.string(from: date) return date.components(separatedBy: " ").first! } //MARK: -- 格式化数字 func formatShowNumber(value:String) -> String { if value.isEmpty { return "0" } //保留位数 let interceptValue = String(format: "%.2f", (value as NSString).doubleValue) //添加分隔符 let format = NumberFormatter() format.numberStyle = .decimal let formatValue = format.string(from: NSNumber(value: (interceptValue as NSString).doubleValue)) return formatValue! } //MARK:--数组转字符串 func dataChangeString(sender:Array<Any>) -> String{ var str = "" do { let json = JSON(sender) let data = try! JSONEncoder().encode(json) str = String(data: data, encoding: .utf8)! }catch { str = "" } return str } //MARK:--字符串转字典 func getDictionaryFromJSONString(jsonString:String) ->NSDictionary{ let jsonData:Data = jsonString.data(using: .utf8)! let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) if dict != nil { return dict as! NSDictionary } return NSDictionary() } //MARK:--字符串转字典 func getDicFromJSONString(jsonString:String) ->Dictionary<String,Any>{ let jsonData:Data = jsonString.data(using: .utf8)! let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) if dict != nil { return dict as! Dictionary } return Dictionary() } //MARK: - 获取系统当前时间 func getTimeDayNow()->String{ let date = Date() let timeFormatter = DateFormatter() timeFormatter.dateFormat = "yyyy-MM-dd" return timeFormatter.string(from: date) as String } func getTimeNow()->String{ let date = Date() let timeFormatter = DateFormatter() timeFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" return timeFormatter.string(from: date) as String } //MARK:--字典转字符串 func dictChangeString(sender:Dictionary<String, Any>) -> String{ var str = "" do { let json = JSON(sender) let data = try! JSONEncoder().encode(json) str = String(data: data, encoding: .utf8)! }catch { str = "" } return str } extension String{ static let random_str_characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" static func randomStr(len : Int) -> String{ var ranStr = "" for _ in 0..<len { let index = Int(arc4random_uniform(UInt32(random_str_characters.count))) ranStr.append(random_str_characters[random_str_characters.index(random_str_characters.startIndex, offsetBy: index)]) } return ranStr } }