如何通过`UnsafeMutablePointer返回字典 ?参数?

问题描述 投票:1回答:2

对于测试,我创建了一个包装Security框架函数的模拟类。一切正常,除了我试图假装SecItemCopyMatching(_:_:)。完整的签名是:

func SecItemCopyMatching(_ query: CFDictionary, _ result: UnsafeMutablePointer<CFTypeRef?>?) -> OSStatus

我不想使用SecItemCopyMatching(_:_:)框架的Security,而是实现一个具有相同签名的虚拟对象,供我自己进行测试。

以下片段来自the official documentation关于如何处理函数结果。我不知道如何通过q​​azxswpoi渲染一个虚拟词典以同样的方式使用。我无法为指针分配任何内容并且被UnsafeMutablePointer弄糊涂了 - 是指向指针的指针吗?

UnsafeMutablePointer<CFTypeRef?>?
ios swift xcode foundation
2个回答
0
投票

我想你会在下面的堆栈上得到你的答案

guard let existingItem = item as? [String : Any], let passwordData = existingItem[kSecValueData as String] as? Data, let password = String(data: passwordData, encoding: String.Encoding.utf8), let username = existingItem[kSecAttrAccount as String] as? String else { throw KeychainError.unexpectedPasswordData }

它是一个指向变量的指针。


0
投票

我发现的工作解决方案:

UnsafeMutablePointer<CFTypeRef> in Swift 3

他们需要了解的关键信息:func SecItemCopyMatching(_ query: CFDictionary, _ result: UnsafeMutablePointer<CFTypeRef?>?) -> OSStatus { let item: [String: Any] = [ kSecAttrAccount as String: "username", kSecValueData as String: "password".data(using: String.Encoding.utf8)! ] result?.pointee = item as AnyObject return copyMatchingStatus } 直接映射到CFTypeRef(参见AnyObject)。将字典转换为Working with Core Foundation Types可以将赋值作为指针。

© www.soinside.com 2019 - 2024. All rights reserved.