Swift4 MD5加密

Swift4.2已近发布一段时间了,新版本的稳定性以及对上个版本的兼容性都有了显著的提升(再也不用吐槽:每个Swift版本都像是一门新的语言啦,hahaha…)。现在大多IOS开发者对Swift持观望态度,原因无非是这门语言太年轻,不稳定之类的,再加之ABI稳定版本(据说是Swift5)不知何时能来,大家普遍生出了再等等的心态。然而,总结这几日的使用情况,Swift4.2的简洁和强大的表现力深深的折服了我,走过了四年的风风雨雨, Swift日趋成熟,所以,现在上车,恰逢其时…

言归正传,下面记录下今天遇到的问题吧:

是的,很简单的一个问题,Swift里的MD5加密。搜了些网上的,发现都有些陈旧,各种报错,有的甚至还要桥接OC。综合大家的写法,找到一段能稳定跑起来的代码,暂时用起来没有问题。下面贴出来,希望能帮到大家,欢迎指正:

import Foundation
// 导入CommonCrypto
import CommonCrypto

// 直接给String扩展方法
extension String {
    func 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<UInt8>.allocate(capacity: 16)
        CC_MD5(str!, strLen, result)
        let hash = NSMutableString()
        for i in 0 ..< digestLen {
            hash.appendFormat("%02x", result[i])
        }
        free(result)
        return String(format: hash as String)
    }
}

用法:

let str = "xxx"
let sign = str.md5()
print("result in \(sign)")

发现Swift支持了namespace后,再也不用导一大推头文件了,又想到隔壁的Java早就支持了,瞬间感觉OC Low了很多;Swift不是纯面向对象的语言,这意味着,函数可以单独写在一个文件里,直接调用;struct也升级到将要和class平起平坐的地位,enum强大的令人难以置信;还有很多新特性,像一个个黑魔法,有着无限魔力,令人着迷。接下来,会继续探索,Swift,你上车了吗?

你可能感兴趣的:(ios,Swift,计算机相关)