Swift & C

当在 Swift 中使用系统中的 C 库时,有些类型是不兼容的,这是因为通常在C中定义的时候,没有严格的格式区分。

但是,在 Swift 中就会有严格的区分,如整型,可以分为Int,Int32,Int64,UInt,UInt32,UInt64

这些在 OC 和 C 的编程的时候,传参时,通常是可以隐式转换的,但是在 Swift 中,是不允许的,只能通过每个类型的构造方法解决这个问题。

如,在一个 Swift 项目中,需要使CommonCrypto(主要是用于加解密算法,是一个典型的 C 库)时,在加解密传参的时候,需要使用各种选项,如加解密的类型kCCEncrypt/kCCDecrypt,使用的算法kCCAlgorithmAES/kCCAlgorithmDES/...,等参数,在传这种参数时,不能直接使用这些已经定义好的类型,而是需要进行一次 Wrap,如CCCrypt方法在定义的时候,使用的是UInt32,而这些常量在 Swift 中当成了 Int,从而导致,无法兼容,所以需要使用UInt32的构造方法 Wrap 一下,解决这个

let status = CCCrypt(UInt32(kCCDecrypt),
      UInt32(kCCAlgorithmAES),
      UInt32(kCCOptionPKCS7Padding),
      keyPtr,
      kCCKeySizeAES256,
      nil,
      self.bytes,
      self.length,
      &output,
      self.length + kCCKeySizeAES256,
      &dataOutMoved)

如需查看完整的项目源码,可移步https://github.com/liuwin7/AES

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容