很快..我有这个代码添加新的联系人,它一直在工作,直到我的代码转换为Swift 3,现在它接受所有属性,除了电子邮件,我得到两个错误:
1-Argument type'String?'不符合预期的类型 'NSCopying'
2-Argument type'String?'不符合预期的类型 'NSSecureCoding'
当我尝试向联系人添加电子邮件时,这是我的代码:
let workEmail = CNLabeledValue(label:"Work Email", value:emp.getEmail())
contact.emailAddresses = [workEmail]
任何帮助?
答案 0 :(得分:30)
在Swift 3中,CNLabeledValue
被声明为:
public class CNLabeledValue<ValueType : NSCopying, NSSecureCoding> : NSObject, NSCopying, NSSecureCoding {
//...
}
您需要让Swift能够推断出符合ValueType
和NSCopying
的{{1}}。
不幸的是,NSSecureCoding
或String
不符合这两者。
并且,Swift 3删除了一些隐式类型转换,例如String?
到String
,您需要明确地转换它。
请试试这个:
NSString
或者这个:
let workEmail = CNLabeledValue(label:"Work Email", value:(emp.getEmail() ?? "") as NSString)
contact.emailAddresses = [workEmail]
(也许后者更好,你不应该做空的。)
另外,正如Cesare所建议的那样,你最好尽可能使用预定义的常量,如if let email = emp.getEmail() {
let workEmail = CNLabeledValue(label:"Work Email", value:email as NSString)
contact.emailAddresses = [workEmail]
}
标签:
CNLabel...
答案 1 :(得分:6)
Swift 3 :电子邮件和电话条目
文档:https://developer.apple.com/reference/contacts
let workPhoneEntry : String = "(408) 555-0126"
let workEmailEntry : String = "test@apple.com"
let workEmail = CNLabeledValue(label:CNLabelWork, value:workEmailEntry as NSString)
contact.emailAddresses = [workEmail]
contact.phoneNumbers = [CNLabeledValue(
label:CNLabelPhoneNumberMain,
value:CNPhoneNumber(stringValue:workPhoneEntry))]
答案 2 :(得分:2)
let workemail = "" //Your Input goes here
let WorkEmail = CNLabeledValue(label:CNLabelWork, value: workmail as NSString)
contact.emailAddresses = [WorkEmail]
对于Swift 3
答案 3 :(得分:-1)
您可以使用方法CNContact mutableCopy
func saveVCardContacts (vCard : Data) {
if #available(iOS 9.0, *) {
let contactStore = CNContactStore()
do {
let saveRequest = CNSaveRequest()
let contacts = try CNContactVCardSerialization.contacts(with: vCard)
var mutablePerson: CNMutableContact
for person in contacts{
mutablePerson = person.mutableCopy() as! CNMutableContact
saveRequest.add(mutablePerson, toContainerWithIdentifier: nil)
}
try contactStore.execute(saveRequest)
} catch {
print("Unable to show the new contact")
}
}else{
print("CNContact not supported.")
}
}