Your code shown above contains a workaround needed till Swift 1.1. (Seems to work in Swift 1.2 or 2, but not recommended.)Here's a code I use in Swift 1.2 (works in Swift 2, I believe), though, I'm not sure you find this cleaner. let keychainQuery: [NSObject: AnyObject] = [ kSecClass : kSecClassGenericPassword, kSecAttrService : serviceName, kSecAttrAccount : userAccount, kSecReturnData : kCFBooleanTrue, kSecMatchLimit : kSecMatchLimitOne] var dataTypeRef: Unmanaged<AnyObject>? let status = SecItemCopyMatching(keychainQuery, &dataTypeRef) if status == errSecSuccess, let retrievedData = dataTypeRef?.takeRetainedValue() as! NSData? { //process retrivedData } else { //process error }UPDATE for Swift 2.2 (or update was needed for former versions...)I believe this compiles and works in Swift 2.2: let keychainQuery: [NSObject: AnyObject] = [ kSecClass : kSecClassGenericPassword, kSecAttrService : serviceName, kSecAttrAccount : userAccount, kSecReturnData : kCFBooleanTrue, kSecMatchLimit
Topic:
Programming Languages
SubTopic:
Swift
Tags: