如何在Swift中使用SecKeychainGetPath

如何在Swift中使用SecKeychainGetPath,swift,Swift,我正在尝试调用Swift中的OSX安全方法SecKeychainGetPath。这就是我到目前为止所做的: var pLength = 1024 as UInt32 var pName = malloc(1024) let oStatus = SecKeychainGetPath(chain, &pLength, &pName) SecKeychainGetPath的方法定义为: func SecKeychainGetPath(keychain: SecKeychain!, i

我正在尝试调用Swift中的OSX安全方法
SecKeychainGetPath
。这就是我到目前为止所做的:

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
func SecKeychainGetPath(keychain:SecKeychain!,ioPathLength:UnsafeMutablePointer,pathName:UnsafeMutablePointer)->OSStatus
我得到的错误是:

Cannot invoke 'SecKeychainGetPath' with an argument list of type '(SecKeychain, inout UInt32, inout UnsafeMutablePointer<Void>)'
无法使用类型为“(SecKeychain,inout UInt32,inout UnsafeMutablePointer)”的参数列表调用“SecKeychainGetPath”

我相信我的
chain
参数很好,但我认为编译器抱怨的是
pName
参数
malloc
返回一个
unsafemtablepointer
其中
SecKeychainGetPath
期望
pName
unsafemtablepointer
。我尝试过强制转换,但标记为不安全和不相关。

您可以传递任何指向函数的指针,该函数需要
unsafemtablepointer
,但在需要类型时,您需要传递匹配的指针。在这种情况下,您需要一个
不可配置指针


这种替代方法的好处是,Swift为您处理所有内存管理,以后无需
dealoc
指针。

正确,谢谢。另外,下一个逻辑部分是将返回的pName读取为
let path=NSFileManager.defaultManager().stringWithFileSystemRepresentation(pName,length:Int(pLength))
var pLength = 1024 as UInt32
var pName = UnsafeMutablePointer<Int8>.alloc(1024)
let oStatus = SecKeychainGetPath(chain, &pLength, pName)
var pName = Array(count: 1024, repeatedValue: 0 as Int8)
var pLength = UInt32(pName.count)
let oStatus = SecKeychainGetPath(chain, &pLength, &pName)