आपको स्पष्ट रूप से Int
और के बीच में कनवर्ट करना होगा CC_LONG
, क्योंकि स्विफ्ट अंतर्निहित रूपांतरण नहीं करता है, जैसा कि (उद्देश्य-) सी।
आपको hash
आवश्यक आकार की एक सरणी के रूप में भी परिभाषित करना होगा।
func sha256(data : NSData) -> NSData {
var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
let res = NSData(bytes: hash, length: Int(CC_SHA256_DIGEST_LENGTH))
return res
}
वैकल्पिक रूप से, आप NSMutableData
आवश्यक बफर आवंटित करने के लिए उपयोग कर सकते हैं :
func sha256(data : NSData) -> NSData {
let res = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))
CC_SHA256(data.bytes, CC_LONG(data.length), UnsafeMutablePointer(res.mutableBytes))
return res
}
स्विफ्ट 3 और 4 के लिए अपडेट:
func sha256(data : Data) -> Data {
var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA256($0, CC_LONG(data.count), &hash)
}
return Data(bytes: hash)
}
स्विफ्ट 5 के लिए अपडेट:
func sha256(data : Data) -> Data {
var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA256($0.baseAddress, CC_LONG(data.count), &hash)
}
return Data(hash)
}