gpt4 book ai didi

swift - 你如何在 Swift 中使用 SecKeychainGetPath

转载 作者:可可西里 更新时间:2023-11-01 00:53:23 26 4
gpt4 key购买 nike

我正在尝试调用 OS X 安全方法 SecKeychainGetPath在 swift 。这是我目前所拥有的:

var pLength = 1024 as UInt32
var pName = malloc(1024)
let oStatus = SecKeychainGetPath(chain, &pLength, &pName)

SecKeychainGetPath的方法定义是:

func SecKeychainGetPath(keychain: SecKeychain!, ioPathLength: UnsafeMutablePointer<UInt32>, pathName: UnsafeMutablePointer<Int8>) -> OSStatus

我得到的错误是:

Cannot invoke 'SecKeychainGetPath' with an argument list of type '(SecKeychain, inout UInt32, inout UnsafeMutablePointer<Void>)'

我相信我的chain参数很好,但我认为它是 pName编译器提示的参数。 malloc返回 UnsafeMutablePointer<Void>其中 SecKeychainGetPath期待 pName成为UnsafeMutablePointer<Int8> .我尝试过强制转换,但它被标记为不安全且无关。

最佳答案

您可以将任何指针传递给需要 UnsafeMutablePointer<Void> 的函数,但是您需要在需要类型时传递匹配的指针。在这种情况下,您需要 UnsafeMutablePointer<Int8> :

var pLength = 1024 as UInt32
var pName = UnsafeMutablePointer<Int8>.alloc(1024)
let oStatus = SecKeychainGetPath(chain, &pLength, pName)

另请注意 UnsafeMutablePointer实例不需要 &函数调用中的前缀。

或者,您可以构造一个数组而不是 UnsafeMutablePointer ,并将其作为 inout 传递参数:

var pName = Array(count: 1024, repeatedValue: 0 as Int8)
var pLength = UInt32(pName.count)
let oStatus = SecKeychainGetPath(chain, &pLength, &pName)

这种替代方法的好处是 Swift 会为您处理所有内存管理——无需 dealloc指针稍后。

关于swift - 你如何在 Swift 中使用 SecKeychainGetPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28614026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com