すぐに..新しい連絡先を追加するためのこのコードがあります。コードをSwift 3に変換するまで機能していましたが、メール以外のすべてのプロパティを受け入れます。2つのエラーが発生します。
1-引数タイプ '文字列?'予期されるタイプ「NSCopying」に準拠していません
2-引数タイプ '文字列?'予期されるタイプ「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]
}
(おそらく後者の方が良いので、空のエントリを作成しないでください。)
そしてもう1つ、Cesareが提案しているように、ラベルにはCNLabel...
のような事前定義された定数を可能な限り使用する方がよいでしょう。
if let email = emp.getEmail() {
let workEmail = CNLabeledValue(label: CNLabelWork, value: email as NSString)
contact.emailAddresses = [workEmail]
}
Swift 3:メールと電話のエントリ
ドキュメント: 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]
Swift 3