如何在Swift中从QR码中保存vCard

在QR码的输出是一个string,我需要保存QR Code如果代码包含一个vCardswift

我得到一个错误,说它不能将CNContacts强制转换为CNMutableContacts

 func foundCode(code: NSString) { // Check if the QR Code is a website, contact, text etc let types :NSTextCheckingType = [.Link , .PhoneNumber, .TransitInformation] let checkTextType = try? NSDataDetector(types: types.rawValue ) let matchs = checkTextType?.matchesInString(code as String, options: .ReportCompletion, range: NSMakeRange(0, (code as String).characters.count)) for match in matchs! { if match.resultType == NSTextCheckingType.Link { UIApplication.sharedApplication().openURL(NSURL(string: code as String)!) } if match.resultType == NSTextCheckingType.PhoneNumber { let vcard: NSData = code.dataUsingEncoding(NSUTF8StringEncoding)! let contactStore = CNContactStore() do { let saveRequest = CNSaveRequest() // create saveRequests let contacts = try? CNContactVCardSerialization.contactsWithData(vcard) // get contacts array from vCard print("\(contacts)") for person in contacts! { saveRequest.addContact(person as! CNMutableContact, toContainerWithIdentifier: nil) // add contacts to saveRequest } try contactStore.executeSaveRequest(saveRequest) // save to contacts } catch { print("Unable to show the new contact") // something went wrong } } } } 

你正试图转换immutable对象,这就是为什么你得到这个错误。 像这样改变你的saveRequest.addContact

 saveRequest.addContact(person.mutableCopy() as! CNMutableContact, toContainerWithIdentifier: nil) 

希望这会帮助你。