ios - 如何在 Swift 3 中向 CNMutableContact 添加新电子邮件?

标签 ios swift cncontact

很快 .. 我有这段代码可以添加新联系人,它一直有效,直到将我的代码转换为 Swift 3,现在它接受除电子邮件之外的所有属性,我收到两个错误:

1-Argument type 'String?' does not conform to expected type 'NSCopying'

2-Argument type 'String?' does not conform to expected type 'NSSecureCoding'

这是我尝试向联系人添加电子邮件时的代码:

    let workEmail = CNLabeledValue(label:"Work Email", value:emp.getEmail())
    contact.emailAddresses = [workEmail]

有什么帮助吗?

最佳答案

在 Swift 3 中,CNLabeledValue 声明为:

public class CNLabeledValue<ValueType : NSCopying, NSSecureCoding> : NSObject, NSCopying, NSSecureCoding {
    //...
}

你需要让 Swift 能够推断 ValueType,它符合 NSCopyingNSSecureCoding

不幸的是,StringString? 都不符合它们。

而且,Swift 3 移除了一些隐式类型转换,比如 StringNSString,你需要显式转换它。

请试试这个:

let workEmail = CNLabeledValue(label:"Work Email", value:(emp.getEmail() ?? "") as NSString)
contact.emailAddresses = [workEmail]

或者这个:

if let email = emp.getEmail() {
    let workEmail = CNLabeledValue(label:"Work Email", value:email as NSString)
    contact.emailAddresses = [workEmail]
}

(也许后者更好,你不应该空输入。)

还有一个,正如 Cesare 所建议的,您最好尽可能使用预定义的常量,例如 CNLabel... 标签:

if let email = emp.getEmail() {
    let workEmail = CNLabeledValue(label: CNLabelWork, value: email as NSString)
    contact.emailAddresses = [workEmail]
}

关于ios - 如何在 Swift 3 中向 CNMutableContact 添加新电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39648830/

相关文章:

ios - appdelegate 中的导航 Controller

ios - dyld : Library not loaded: @rpath/libswiftCore. dylib/找不到图像

ios - 如何直接打开新联系人屏幕?

ios - 如何在 Swift 3.0 中使用 CNContact 获取添加或编辑联系人的日期

ios - 访问用户联系人电话号码 CNContacts

ios - Phonegap 和 Apache cordova 之间的不明确区别

iOS 8 - 如何确定前台应用程序以及获取正在运行的应用程序列表

iOS titleForHeaderInSection 崩溃

ios - 如何将一个SCNNode指向另一个SCNNode?

ios - 在 Mac OS 上以编程方式添加 UIView 和 UILabel