Da Swift standardmäßig keine MD5-Funktion anbietet, muss man sich mit einem kleinen Trick in Form einer Extension weiterhelfen:
// Create a MD5 out of a String
extension String {
var md5: String! {
let str = self.cStringUsingEncoding(NSUTF8StringEncoding)
let strLen = CC_LONG(self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
let digestLen = Int(CC_MD5_DIGEST_LENGTH)
let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen)
CC_MD5(str!, strLen, result)
let hash = NSMutableString()
for i in 0..<digestLen {
hash.appendFormat("%02x", result[i])
}
result.destroy()
return String(format: hash as String)
}
}
Wichtig:
Damit auf Typen wie CC_Long, CC_MD5 etc. zugegriffen werden kann, muss ein Bridging-Header erstellt werden, in dem folgende Codezeile stehen muss:
#import <CommonCrypto/CommonCrypto.h>
Der MD5-Hash kann z.B. verwendet werden, um für die entsprechenden Strings Ids zu vergeben (Objekte, Dictionaries, Arrays, …). Dies bietet sich an, da normale Objekt-Ids auch Slashes enthalten können, was bei Abfragen zu Problemen führen kann.
Aber aufgepasst: Die folgenden beiden Schreibweisen (für die selbe Objekt-Id!) ergeben unterschiedliche MD5-Strings:
let md5_1 = objectID.description.md5
let md5_2 = „\(objectID.description)“.md5