當(dāng)在 Swift 中使用系統(tǒng)中的 C 庫時(shí)拒迅,有些類型是不兼容的,這是因?yàn)橥ǔT贑中定義的時(shí)候卸察,沒有嚴(yán)格的格式區(qū)分脯厨。
但是,在 Swift 中就會(huì)有嚴(yán)格的區(qū)分坑质,如整型合武,可以分為Int,Int32,Int64,UInt,UInt32,UInt64
临梗。
這些在 OC 和 C 的編程的時(shí)候,傳參時(shí)稼跳,通常是可以隱式轉(zhuǎn)換的盟庞,但是在 Swift 中,是不允許的汤善,只能通過每個(gè)類型的構(gòu)造方法解決這個(gè)問題什猖。
如,在一個(gè) Swift 項(xiàng)目中红淡,需要使CommonCrypto
(主要是用于加解密算法不狮,是一個(gè)典型的 C 庫)時(shí),在加解密傳參的時(shí)候在旱,需要使用各種選項(xiàng)摇零,如加解密的類型kCCEncrypt/kCCDecrypt
,使用的算法kCCAlgorithmAES/kCCAlgorithmDES/...
桶蝎,等參數(shù)驻仅,在傳這種參數(shù)時(shí),不能直接使用這些已經(jīng)定義好的類型登渣,而是需要進(jìn)行一次 Wrap噪服,如CCCrypt方法在定義的時(shí)候,使用的是UInt32
绍豁,而這些常量在 Swift 中當(dāng)成了 Int芯咧,從而導(dǎo)致,無法兼容竹揍,所以需要使用UInt32
的構(gòu)造方法 Wrap 一下敬飒,解決這個(gè)
let status = CCCrypt(UInt32(kCCDecrypt),
UInt32(kCCAlgorithmAES),
UInt32(kCCOptionPKCS7Padding),
keyPtr,
kCCKeySizeAES256,
nil,
self.bytes,
self.length,
&output,
self.length + kCCKeySizeAES256,
&dataOutMoved)
如需查看完整的項(xiàng)目源碼,可移步https://github.com/liuwin7/AES