用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的用法我就不详细展开说了,一个功能很强大,又很美观的第三方控件,大家可以自己研究下

时间: 2024-10-10 10:06:55

用Swift实现MD5算法&引入第三方类库(MBProgressHUD)的相关文章

angular4之爬坑之路(2)angular脚手引入第三方类库

如何在angular4脚手架中引入第三方类库呢比如jquery.swiper.bootstrap...... 例如引入jquery:(其他类库类比jquery即可) 第一步:在我们的项目目录下输入 npm install jquery --save 会看到在package.json文件中会自动出现对应的jquery的版本号: 第二步:在angular-cli.json文件下的scripts里填入jquery的路径:(需要在styles里引入对应的类库css路径) 第三步:下载对应类库的.d.ts

laravel引入第三方类库的方法

laravel版本:5.1 今天做的是引入第三方的phpquery类库,方法: 在laravel的app目录下自定义一个文件夹,我用的名字是:Libs 然后直接将phpquery类库扔进这个目录 在composer.json中的autoload下的classmap下加入"app/Libs/phpQuery" 然后在命令行中运行 composer dumpautoload 5.接下来就可以直接在控制器中使用phpquery类了.

TP5 中引入第三方类库

通过了解tp5的目录结构,我们知道其中有两个目录是纺织扩展类库文件的. extend是放置自定义或者其他类文件的. vendor目录是放置composer类库文件的. 当我们的第三方类库文件是下载的,而且类文件目录一层又一层,我们开发当中要按照tp5的命名规范来做效率就会非常的低,而且面向对象编程就是拿来即用,何必还要动手去改类文件的源码. 其实tp5给了我们一种方式去实现不用命名空间来加载第三方的类! 我们将类文件放到extend目录下,在控制器中要用到类的话可以通过import(),函数手动

android studio 引入第三方类库jar包

第三方类库jar包 这就简单多了,直接将jar包拷贝到app/libs下,然后在app下的build.gradle中添加此jar的依赖.如下: dependencies { compile 'com.android.support:support-v4:19.1.0' compile files('libs/libammsdk.jar') compile files('libs/universal-image-loader-1.8.6-with-sources.jar') compile fil

iOS开发引入第三方类库的问题

在开发iOS程序的过程中,通常在导入第三方的类库(.a/.o)文件会报出一系列的错误: 看似缺少了某个类库文件,但多次检查之后发现,没缺少啥引用的,甚至跟原来的Demo一个都不差,这是怎么回事? 由于第三方类库多数是用C++或者C编写的,在引用过程中,还需要告诉编译器可能会出现的语言种类,以便使用对应的解释器进行解析. OK,那么我们只需要在XCode环境中检查以下几个配置项是否与下面一致即可: TARGETS->Build Settings,搜索 1.Other Linker Flags:-O

【Thinkphp】引入第三方类库常见问题

TP3.2在添加第三方sdk的时候,文件放在ThinkPHP/Library/Org文件夹下可独立创建文件夹(官方文档有其他思路)需对文件做以下修改. 1.第一应该修改文件的名称(下载的sdk一般是 类名.php,TP的类名命名规则是类名.class.php). 2.在下载的sdk类名中添加命名空间. 3.最后就是在引用的时候use一下,然后就可以直接实例化对象了. vendor遇见的问题 vendor引入一个phpexcel类,引入这个类,有个快捷引入方式手册有注明http://documen

angular4(2-2)angular脚手架引入第三方类库(swiper)

试了好多方法,npm install 方法失败了,下载到本地是可以使用的: 将swiper文件放到assets文件下: 项目目录下:(命令行) 因为ts并不能准确识别js语法,所以需要用ts中的interface接口,将js转化成ts并暴露出来 npm install @types/swiper --save npm install @types/swiper --save-dev 备注:--save配置在生产环境:--save-dev配置在开发环境 在index.html文件里引入: <lin

tp5中引入extend中的第三方类库 这里以验证码为例

1.首先在tp5底层vendor自带验证码类库,这里为了测试,可以先拷贝出来一份,放入到extend中,vendor->topthink->think-captcha 2.可以先在extend中先新建一个lib文件夹,把think-captcha中的内容放入到lib中 3.打开src下的Captcha.php文件 ,把命名空间namespace删除掉 ,extend文件夹下就算解决完成了. 4.控制器中: 首先应引入第三方类库,可以查看手册中的  自动加载模块. \ 的意思是不让它根据命名空间

Swift项目引入第三方库的方法

以下,将创建一个Swift项目,然后引入3个库: Snappy 简化autolayout代码的库 Alamofire HTTP网络库,AFNetworking作者写的 SDWebImage 图片加载,objc项目,通过头文件bridge方式供swift使用 其中,前两个是Swift的库,SDWebImage是Objc的库. 源代码见:https://github.com/MarshalW/SwiftWith3rdLibDemo 项目跑起来是这个样子: 做下面步骤之前,需要让自己的项目是git项目