Swift常用的全局常量和函數(shù)(OC宏定義)

// 那么在Swift中如何對(duì)常用的工具方法進(jìn)行定義呢? Swift中不支持#define語法装诡,只能依賴Swift自身的特性來實(shí)現(xiàn):

在OC中我們通常使用宏定義來實(shí)現(xiàn)全局常量的表示凑懂,而swift中宏定義這個(gè)說法已經(jīng)取締了荒叼,一般的有如下幾種方式: 1. 常量 2. 全局函數(shù) 3. 計(jì)算屬性 4. 閉包類型的常量

// MARK:- 日志打印

//開發(fā)的時(shí)候打印乖杠,但是發(fā)布的時(shí)候不打印,使用方法匣缘,輸入 print(message: "輸入")

  func print<T>(message: T, fileName: String = #file, methodName: String = #function, lineNumber: Int = #line) {
      #if DEBUG
      //獲取當(dāng)前時(shí)間
      let now = Date()
      // 創(chuàng)建一個(gè)日期格式器
      let dformatter = DateFormatter()
      dformatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
      // 要把路徑最后的字符串截取出來
      let lastName = ((fileName as NSString).pathComponents.last!)
      print("\(dformatter.string(from: now)) [\(lastName)][第\(lineNumber)行] \n\t\t \(message)")
      #endif
  }

// MARK:- 沙盒相關(guān)

//獲取沙盒Document路徑
let kDocumentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
//獲取沙盒Cache路徑
let kCachePath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first
//獲取沙盒temp路徑
let kTempPath = NSTemporaryDirectory()

// MARK:- UserDefaults 操作

    let kUserDefaults = UserDefaults.standard
    func kUserDefaultsRead(_ KeyStr: String) -> String {
        return kUserDefaults.string(forKey: KeyStr)!
    }
    func kUserDefaultsWrite(_ obj: Any, _ KeyStr: String) {
        kUserDefaults.set(obj, forKey: KeyStr)
    }
    func kUserValue(_ A: String) -> Any? {
        return kUserDefaults.value(forKey: A)
    }

// MARK:- 顏色

func kRGBAColor(_ r: CGFloat,_ g: CGFloat,_ b: CGFloat,_ a: CGFloat) -> UIColor {
    return UIColor.init(red: r, green: g, blue: b, alpha: a)
}
func kRGBColor(_ r: CGFloat,_ g: CGFloat,_ b: CGFloat) -> UIColor {
    return UIColor.init(red: r, green: g, blue: b, alpha: 1.0)
}
func kHexColorA(_ HexString: String,_ a: CGFloat) ->UIColor {
    return UIColor.colorWith(hexString: HexString, alpha: a)
}
func kHexColor(_ HexString: String) ->UIColor {
    return UIColor.colorWith(hexString: HexString)
}
// 通用顏色值

let kBackGroundColor = kHexColor("f0f0f0")

//字體 字號(hào)

func kFontSize(_ a: CGFloat) -> UIFont {
    return UIFont.systemFont(ofSize: a)
}
func kFontBoldSize(_ a: CGFloat) -> UIFont {
    return UIFont.boldSystemFont(ofSize: a)
}
func kFontForIPhone5or6Size(_ a: CGFloat, _ b: CGFloat) -> UIFont {
    return kUI_IPHONE5 ? kFontSize(a) : kFontSize(b)
}

// MARK:- 獲取屏幕大小

let kUIScreenSize = UIScreen.main.responds(to: #selector(getter: UIScreen.nativeBounds)) ? CGSize(width: UIScreen.main.nativeBounds.size.width / UIScreen.main.nativeScale, height: UIScreen.main.nativeBounds.size.height / UIScreen.main.nativeScale) : UIScreen.main.bounds.size
let kUIScreenWidth = kUIScreenSize.width
let kUIScreenHeight = kUIScreenSize.height
let kUIScreenBounds = UIScreen.main.bounds

//APP版本號(hào)

let kAppVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"]
//當(dāng)前系統(tǒng)版本號(hào)
let kVersion = (UIDevice.current.systemVersion as NSString).floatValue
//檢測(cè)用戶版本號(hào)
let kiOS12 = (kVersion >= 12.0)
let kiOS11 = (kVersion >= 11.0 && kVersion < 12.0)
let kiOS10 = (kVersion >= 10.0 && kVersion < 11.0)
let kiOS9 = (kVersion >= 9.0 && kVersion < 10.0)
let kiOS8 = (kVersion >= 8.0 && kVersion < 9.0)
let kiOS12Later = (kVersion >= 12.0)
let kiOS11Later = (kVersion >= 11.0)
let kiOS10Later = (kVersion >= 10.0)
let kiOS9Later = (kVersion >= 9.0)
let kiOS8Later = (kVersion >= 8.0)

//獲取當(dāng)前語言

let kAppCurrentLanguage = Locale.preferredLanguages[0]
//判斷是否為iPhone
let kDeviceIsiPhone = (UI_USER_INTERFACE_IDIOM() == .phone)
//判斷是否為iPad
let kDeviceIsiPad = (UI_USER_INTERFACE_IDIOM() == .pad)

//判斷 iPhone 的屏幕尺寸

let kSCREEN_MAX_LENGTH = max(kUIScreenWidth, kUIScreenHeight)
let kSCREEN_MIN_LENGTH = min(kUIScreenWidth, kUIScreenHeight)

//獲取狀態(tài)欄瘦棋、標(biāo)題欄稀火、導(dǎo)航欄高度

let kUIStatusBarHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height
let kUINavigationBarHeight: CGFloat =  kUI_IPHONEX ? 88 : 44
let KUITabBarHeight: CGFloat = kUI_IPHONEX ? 83 : 49
//navigationBarHeight默認(rèn)高度44 (iPhoneX 88)
//tabBarHeight默認(rèn)高度49     (iPhoneX 83)

//適配 350 375 414       568 667 736
func kAutoLayoutWidth(_ width: CGFloat) -> CGFloat {
    return width*kUIScreenWidth / 375
}
func kAutoLayoutHeigth(_ height: CGFloat) -> CGFloat {
    return height*kUIScreenHeight / 667
}

//機(jī)型判斷

let kUI_IPHONE = (UIDevice.current.userInterfaceIdiom == .phone)
let kUI_IPHONE5 = (kUI_IPHONE && kSCREEN_MAX_LENGTH == 568.0)
let kUI_IPHONE6 = (kUI_IPHONE && kSCREEN_MAX_LENGTH == 667.0)
let kUI_IPHONEPLUS = (kUI_IPHONE && kSCREEN_MAX_LENGTH == 736.0)
let kUI_IPHONEX = (kUI_IPHONE && kSCREEN_MAX_LENGTH > 780.0)

// 注冊(cè)通知

func kNOTIFY_ADD(observer: Any, selector: Selector, name: String) {
    return NotificationCenter.default.addObserver(observer, selector: selector, name: Notification.Name(rawValue: name), object: nil)
}
// 發(fā)送通知
func kNOTIFY_POST(name: String, object: Any) {
    return NotificationCenter.default.post(name: Notification.Name(rawValue: name), object: object)
}
// 移除通知
func kNOTIFY_REMOVE(observer: Any, name: String) {
    return NotificationCenter.default.removeObserver(observer, name: Notification.Name(rawValue: name), object: nil)
}

//代碼縮寫

let kApplication = UIApplication.shared
let kAPPKeyWindow = kApplication.keyWindow
let kAppDelegate = kApplication.delegate
let kAppNotificationCenter = NotificationCenter.default
let kAppRootViewController = kAppDelegate?.window??.rootViewController

/**
字符串是否為空
@param str NSString 類型 和 子類
@return BOOL類型 true or false
*/

func kStringIsEmpty(_ str: String!) -> Bool {
    if str.isEmpty {
        return true
    }
    if str == nil {
        return true
    }
    if str.count < 1 {
        return true
    }
    if str == "(null)" {
        return true
    }
    if str == "null" {
        return true
    }
    return false
}

// 字符串判空 如果為空返回@“”

func kStringNullToempty(_ str: String) -> String {
    let resutl = kStringIsEmpty(str) ? "" : str
    return resutl
}
func kStringNullToReplaceStr(_ str: String,_ replaceStr: String) -> String {
    let resutl = kStringIsEmpty(str) ? replaceStr : str
    return resutl
}

/**
數(shù)組是否為空
@param array NSArray 類型 和 子類
@return BOOL類型 true or false
*/

func kArrayIsEmpty(_ array: [String]) -> Bool {
    let str: String! = array.joined(separator: "")
    if str == nil {
        return true
    }
    if str == "(null)" {
        return true
    }
    if array.count == 0 {
        return true
    }
    if array.isEmpty {
        return true
    }
    return false
}

/**
字典是否為空
@param dic NSDictionary 類型 和子類
@return BOOL類型 true or false
*/

func kDictIsEmpty(_ dict: NSDictionary) -> Bool {
    let str: String! = "\(dict)"
    if str == nil {
        return true
    }
    if str == "(null)" {
        return true
    }
    if dict .isKind(of: NSNull.self) {
        return true
    }
    if dict.allKeys.count == 0 {
        return true
    }
    return false
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赌朋,隨后出現(xiàn)的幾起案子凰狞,更是在濱河造成了極大的恐慌,老刑警劉巖沛慢,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赡若,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡团甲,警方通過查閱死者的電腦和手機(jī)逾冬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躺苦,“玉大人身腻,你說我怎么就攤上這事∑ダ澹” “怎么了嘀趟?”我有些...
    開封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)愈诚。 經(jīng)常有香客問我她按,道長(zhǎng),這世上最難降的妖魔是什么炕柔? 我笑而不...
    開封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任酌泰,我火速辦了婚禮,結(jié)果婚禮上匕累,老公的妹妹穿的比我還像新娘宫莱。我一直安慰自己,他們只是感情好哩罪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開白布授霸。 她就那樣靜靜地躺著巡验,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碘耳。 梳的紋絲不亂的頭發(fā)上显设,一...
    開封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音辛辨,去河邊找鬼捕捂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛斗搞,可吹牛的內(nèi)容都是我干的指攒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼僻焚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼允悦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虑啤,我...
    開封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤隙弛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后狞山,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體全闷,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年萍启,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了总珠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡勘纯,死狀恐怖姚淆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屡律,我是刑警寧澤腌逢,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站超埋,受9級(jí)特大地震影響搏讶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霍殴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一媒惕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧来庭,春花似錦妒蔚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)科盛。三九已至,卻和暖如春菜皂,著一層夾襖步出監(jiān)牢的瞬間贞绵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工恍飘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榨崩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓章母,卻偏偏與公主長(zhǎng)得像母蛛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乳怎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容