這是你運行從一定的複雜性,因爲必須與C一起工作。
這裏主要關心的是你傳遞給函數的指針的生命期。下面的代碼使用指向Swift字符串緩衝區的指針。如果areKeysConsistent
捕獲這些指針供以後使用,則會成爲問題。 ARC可能會取消分配Swift字符串,使這些存儲的指針變成懸掛指針。
func areKeysConsistent(
_ cert: UnsafeMutablePointer<UInt8>, _ certLength: Int,
_ key: UnsafeMutablePointer<UInt8>, _ keyLength: Int,
_ pass: UnsafeMutablePointer<UInt8>, _ passLength: Int
) {
print(cert, key, pass)
}
let certificate = "cert"
let privateKey = "key"
let password = "password"
var certificateCString = certificate.utf8CString
var privateKeyCString = privateKey.utf8CString
var passwordCString = password.utf8CString
certificateCString.withUnsafeMutableBytes { certUMRBP in
privateKeyCString.withUnsafeMutableBytes { pkUMRBP in
passwordCString.withUnsafeMutableBytes { passUMRBP in
areKeysConsistent(
certUMRBP.baseAddress!.bindMemory(to: UInt8.self, capacity: certUMRBP.count),
certUMRBP.count,
pkUMRBP.baseAddress!.bindMemory(to: UInt8.self, capacity: pkUMRBP.count),
pkUMRBP.count,
passUMRBP.baseAddress!.bindMemory(to: UInt8.self, capacity: passUMRBP.count),
passUMRBP.count
)
}
}
}
的問題是,一個字符串是INT8(CCHAR),_not_ UIInt8的數組。這裏有一個類型不匹配。它是由UInt8構成的_data_(Data,NSData)。 – matt
「areKeysConsistent」函數來自哪裏?它受你控制嗎?奇怪的是,它預計'UInt8'不'CChar'('Int8') – Alexander
可能重複的[Swift convert string to UnsafeMutablePointer](http://stackoverflow.com/questions/30042494/swift-convert-string-to- unsafemutablepointerint8) –
JAL