微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Swift实现MD5算法&引入第三方类库MBProgressHUD

之前项目里面是用objc写的MD5加密算法,最近在用swift重写以前的项目,遇到了这个问题。好在最后解决了。顺带解决掉的还有如何引入第三方的类库,例如MBProgressHUD(SVProgressHUD)等一些特别好的控件

解决方法其实是用objc和swift混合编程的方法,利用Bridging-header文件

什么是Briding-header?你可以简单的理解为在一个用swift语言开发的工程中,引入objective-c文件是需要做一个串联文件,好比架设了一个桥,让swift中也可以调用objective-c的类库和frame等等。

那么问题来了,如何才能新建这个Briding-header文件

1. 确保你的工程是用swift建立的

图中的language选择swift


2. 任意新建一个类,语言选取objective-c


这个步骤仅仅是为了生成我们需要的一个文件;之后我们将删除本步骤中建好的类,所以类名什么的随便起好了


任意写入类名,next之后,我们会得到一条提示提示我们是否要建立这个bridging-header文件,我们选择,就可以看到目录中多出来这样一个xxx-bridging-header.h文件

然后移除这个文件中的所有内容,并且移除我们之前步骤中生成的objc的.h和.m两个文件(当然如果有用你可以保留下来)。

3. 接下来,在xxx-bridging-header.h 中import进入我们想要的各种文件

在我的实例项目中共import了两个,第一行是为了写MD5算法,第二行是为了调用第三方的类库,MBProgressHUD

我们分开来说吧:


MD5算法

我们需要import <CommonCrypto/CommonDigest.h>

之后,在你的任意一个.swift文件中,写入下面的代码

extension String{
    func md5() ->String!{
        let str = self.cStringUsingEncoding(NSUTF8StringEncoding)
        let strLen = CUnsignedInt(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
        let digestLen = Int(CC_MD5_DIGEST_LENGTH)
        let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen)
        CC_MD5(str!,strLen,result)
        var hash = NSMutableString()
        for i in 0 ..< digestLen {
            hash.appendFormat("%02x",result[i])
        }
        result.destroy()
        return String(format: hash as String)
    }
}
我的Xcode版本是6.3的beta5,因为6.1.1总是会跳出一个什么XXXkit crash掉的错误,特别烦人,网上找了好久说的方法都没有用,就只好去apple 官网下了个beat版的6.3安装, 感觉好多了。

6.3里面更新了apple watch(细心的朋友可以在上面的图里面发现apple watch的影子) 和swift1.2, 所以一些swift的语法可能有细小差别,不过应该影响不大,这个我参照stackoverflow上的大神的解答:


另一位大神估计是用的和我一样版本的,不过还是在string(format)语句里面有些小的差别




这样,我们就可以直接这样写来调用md5算法:

var str = "test123"
var str_Md5 = str.md5()

很简单的吧,因为加入了extension String之后,String类就有了一个函数 md5,结果就是直接返回当前str的MD5加密后的结果




MBProgressHUD

这个就更简单了,去GitHub上下载最新的MBProgressHUD, 然后把.h 和.m 文件拷贝到项目工程里面,可以在之前的图片里面看到,然后在bridging-header.h中加入第二行

#import "MBProgressHUD.h"

然后你就可以在你的项目中这样生成

   //show the loadingNotification
            let loadingNotification = MBProgressHUD.showHUDAddedTo(self.view,animated: true)
            loadingNotification.mode = MBProgressHUDModeIndeterminate
            loadingNotification.labelText = "查询中..."

然后这样消除
MBProgressHUD.hideAllHUDsForView(self.view,animated: true)

关于MBProgressHUD的用法我就不详细展开说了,一个功能很强大,又很美观的第三方控件,大家可以自己研究下

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐