如何在Swift中使用SecKeychainGetPath
我正在尝试调用Swift中的OSX安全方法如何在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
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)