【问题标题】:Unmanaged <SecKey> is not convertible to SecKey非托管 <SecKey> 不能转换为 SecKey
【发布时间】:2014-09-13 11:10:31
【问题描述】:

我想在 Swift 中进行 RSA 加密,但我在这一行遇到了一个奇怪的错误:

    var publicKey:SecKeyRef = KeyFormatter.getPublicKeyReference("com.apple.sample.publickey")

通常,在 Objective-C 中是可以的,并且“getPublicKeyReference”方法返回一个 SecKeyRef 对象。但是当我根据 Swift 语法在 Swift 文件中键入它时,它会给我一个错误“Unmanaged is not convertible to SecKey”。

KeyFormatter 类仍然是用 Objective-C 编写的。那么当我调用这个方法(桥接标头)时,返回类型在 Swift 中的表示方式不同吗?如果是这样,我该如何克服这个问题?

【问题讨论】:

  • 我猜这是关于托管/非托管代码的一般问题。您可能必须编组/解组对象,或使用分解/组合重新创建对象。不幸的是我不知道该怎么做,否则我会给你答案;我必须保持这个提示,希望是正确的方向。

标签: objective-c encryption swift rsa


【解决方案1】:

参见 Using Swift with Cocoa and Objective-C -> Working with Cocoa Data Types -> 一直向下滚动到“Core Foundation”。

由于该特定 API 当前未针对内存管理语义进行审核,因此您需要根据该特定方法的内存管理语义调用 takeUnretainedValue()takeRetainedValue()

【讨论】:

  • 感谢您解决了我的问题。 var pKey:SecKeyRef = publicKey.takeRetainedValue() 现在我可以毫无问题地获取 SecKeyRef 对象。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多