用Swift實現MD5演算法&引入第三方類庫(MBProgressHUD),Swift實現MD5演算法

來源:互聯網
上載者:User

用Swift實現MD5演算法&引入第三方類庫(MBProgressHUD),Swift實現MD5演算法

之前項目裡面是用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的用法我就不詳細展開說了,一個功能很強大,又很美觀的第三方控制項,大家可以自己研究下




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.