Ziz*_*zoo 13 ios swift cncontact
很快..我有这个代码添加新的联系人,它一直工作,直到我的代码转换为Swift 3,现在它接受所有属性,除了电子邮件我得到两个错误:
1-Argument类型'String?' 不符合预期类型'NSCopying'
2-Argument类型'String?' 不符合预期类型'NSSecureCoding'
当我尝试向联系人添加电子邮件时,这是我的代码:
let workEmail = CNLabeledValue(label:"Work Email", value:emp.getEmail())
contact.emailAddresses = [workEmail]
Run Code Online (Sandbox Code Playgroud)
任何帮助?
OOP*_*Per 32
在Swift 3中,CNLabeledValue声明为:
public class CNLabeledValue<ValueType : NSCopying, NSSecureCoding> : NSObject, NSCopying, NSSecureCoding {
//...
}
Run Code Online (Sandbox Code Playgroud)
你需要让Swift能够推断出ValueType符合NSCopying和NSSecureCoding.
不幸的是,String或者String?不符合他们两者.
而且,斯威夫特3去掉了一些隐式类型转换,比如String到NSString,你需要明确地投它.
请试试这个:
let workEmail = CNLabeledValue(label:"Work Email", value:(emp.getEmail() ?? "") as NSString)
contact.emailAddresses = [workEmail]
Run Code Online (Sandbox Code Playgroud)
或这个:
if let email = emp.getEmail() {
let workEmail = CNLabeledValue(label:"Work Email", value:email as NSString)
contact.emailAddresses = [workEmail]
}
Run Code Online (Sandbox Code Playgroud)
(也许后者更好,你不应该做空的.)
还有一个,正如Cesare所建议的那样,你最好CNLabel...尽可能使用标签之类的预定义常量:
if let email = emp.getEmail() {
let workEmail = CNLabeledValue(label: CNLabelWork, value: email as NSString)
contact.emailAddresses = [workEmail]
}
Run Code Online (Sandbox Code Playgroud)
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))]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5752 次 |
| 最近记录: |