首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自AnyObject的错误转换?去SecKeyRef?斯威夫特

来自AnyObject的错误转换?去SecKeyRef?斯威夫特
EN

Stack Overflow用户
提问于 2016-08-01 19:47:02
回答 1查看 428关注 0票数 1

作为基于Swift的PKI实现的一部分,我将SecKeyWrapper.m移植到Swift

密钥链访问方法的目标C和Swift都很好,除了Swift实现的一部分之外。

我以base64格式接收来自对等方的公钥。它被转换为NSData,然后使用以下方法保存在密钥链中:

代码语言:javascript
复制
statusCode = SecItemAdd(queryDictionary, &persistentPeer)

在成功地将对等公钥保存到密钥链中之后,我需要将其作为SecKeyRef。

代码语言:javascript
复制
    queryDictionary[kSecReturnPersistentRef] = true
    var peerKeyRef: AnyObject?
    statusCode = SecItemCopyMatching(queryDictionary, &peerKeyRef)

问题是SecItemCopyMatching返回AnyObject类型的对象吗?而不能被抛给SecKeyRef (或者SecKey是一个别名)

代码语言:javascript
复制
let key = peerKeyRef as? SecKeyRef // Compile error.

我发现的工作是将peerKeyRef转换为NSObject?然后使用Objective连接到SecKey,如下所示:

代码语言:javascript
复制
let keyObject = peerKeyRef as? NSObject
keyRef = Utility.getSecKeyRefFromAnyObject(keyObject).takeRetainedValue()

执行此操作的Objetive-C代码如下:

代码语言:javascript
复制
+(SecKeyRef) getSecKeyRefFromNSObject:(id)theObject {
    return (__bridge SecKeyRef)theObject;
}

使用此解决方案向SecKey转换可以很好地处理预期结果(没有警告或错误)。

您认为在转换AnyObject的Swift代码中缺少什么?去SecKeyRef?

我正在使用Xcode 7.3.1和SWIFT2.2

Rgds..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-01 20:46:51

对我来说,编译错误似乎是个错误。(当所有CF类型都作为AnyObject的类型别名导入时,这曾经是一个有效的诊断。)

但在你的情况下,我会这样做:

代码语言:javascript
复制
let key = peerKeyRef as! SecKeyRef?

您100%确信查询返回SecKeyRefnil,不是吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38706955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档