1年前 (2016-08-24)  Swift  已收录 |   抢沙发  554 
文章评分 1 次,平均分 5.0
[收起] 文章目录

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

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

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

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

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

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

图中的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() -&gt;String!{
        let str = self.cStringUsingEncoding(NSUTF8StringEncoding)
        let strLen = CUnsignedInt(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
        let digestLen = Int(CC_MD5_DIGEST_LENGTH)
        let result = UnsafeMutablePointer&lt;CUnsignedChar&gt;.alloc(digestLen)
        CC_MD5(str!, strLen, result)
        var hash = NSMutableString()
        for i in 0 ..&lt; 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的用法我就不详细展开说了,一个功能很强大,又很美观的第三方控件,大家可以自己研究下

 

除特别注明外,本站所有文章均为搞机哥原创,转载请注明出处来自http://www.gaojig.com/archives/580.html

关于
搞机哥-爱搞机的程序猿

发表评论

暂无评论


切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

切换登录

注册

扫一扫二维码分享