Quickly .. I have this code to add new contact , it was working until converting my code to Swift 3 , now it accept all properties except the email I get two errors :
1-Argument type 'String?' does not conform to expected type 'NSCopying'
2-Argument type 'String?' does not conform to expected type 'NSSecureCoding'
this is my code when I try to add email to contact :
let workEmail = CNLabeledValue(label:"Work Email", value:emp.getEmail())
contact.emailAddresses = [workEmail]
any help ?
In Swift 3, CNLabeledValue is declared as:
public class CNLabeledValue<ValueType : NSCopying, NSSecureCoding> : NSObject, NSCopying, NSSecureCoding {
//...
}
You need to make Swift able to infer the ValueType, which conforms to NSCopying and NSSecureCoding.
Unfortunately, String or String? does not conform to neither of them.
And, Swift 3 removed some implicit type conversions, such as String to NSString, you need to cast it explicitly.
Please try this:
let workEmail = CNLabeledValue(label:"Work Email", value:(emp.getEmail() ?? "") as NSString)
contact.emailAddresses = [workEmail]
Or this:
if let email = emp.getEmail() {
let workEmail = CNLabeledValue(label:"Work Email", value:email as NSString)
contact.emailAddresses = [workEmail]
}
(Maybe the latter is the better, you should not make an empty entry.)
And one more, as suggested by Cesare, you'd better use predefined constants like CNLabel... for labels as far as possible:
if let email = emp.getEmail() {
let workEmail = CNLabeledValue(label: CNLabelWork, value: email as NSString)
contact.emailAddresses = [workEmail]
}
Swift 3: Email and Phone entry
Documentation: https://developer.apple.com/reference/contacts
let workPhoneEntry : String = "(408) 555-0126"
let workEmailEntry : String = "[email protected]"
let workEmail = CNLabeledValue(label:CNLabelWork, value:workEmailEntry as NSString)
contact.emailAddresses = [workEmail]
contact.phoneNumbers = [CNLabeledValue(
label:CNLabelPhoneNumberMain,
value:CNPhoneNumber(stringValue:workPhoneEntry))]
let workemail = "" //Your Input goes here
let WorkEmail = CNLabeledValue(label:CNLabelWork, value: workmail as NSString)
contact.emailAddresses = [WorkEmail]
For Swift 3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With