- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
很快 .. 我有这段代码可以添加新联系人,它一直有效,直到将我的代码转换为 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
,它符合 NSCopying
和 NSSecureCoding
。
不幸的是,String
或 String?
都不符合它们。
而且,Swift 3 移除了一些隐式类型转换,比如 String
到 NSString
,你需要显式转换它。
请试试这个:
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/
我正在尝试使用以下代码将电子邮件添加到我的联系信息以将其存储在本地设备上,不幸的是代码使应用程序崩溃。我该如何解决这个问题?我在 Objective-C 中看不到在线所有示例都在 Swift CNLa
我想允许用户在显示原始联系人后从联系人中删除元素(例如 CNPhoneNumber、CNEmailAddresses),并根据他们的选择从我的联系人中删除编辑联系人。 即使我有一个可变联系人并使用我代
我需要联系、更改并存储回来。 CNContactStore().unifiedContacts 给我 CNContact 实例,但是 CNSaveRequest().update 需要 CNMutab
我想通过我的应用程序在 iOS 移动通讯录中添加一个自定义隐藏字段。 是否可以在 iOS 移动联系人中添加新的具有值的隐藏字段? CNMutableContact 是否允许我添加新的自定义属性? 最佳
很快 .. 我有这段代码可以添加新联系人,它一直有效,直到将我的代码转换为 Swift 3,现在它接受除电子邮件之外的所有属性,我收到两个错误: 1-Argument type 'String?' d
我是一名优秀的程序员,十分优秀!