web-dev-qa-db-ja.com

Swift 3でCNMutableContactに新しいメールを追加する方法は?

すぐに..新しい連絡先を追加するためのこのコードがあります。コードをSwift 3に変換するまで機能していましたが、メール以外のすべてのプロパティを受け入れます。2つのエラーが発生します。

1-引数タイプ '文字列?'予期されるタイプ「NSCopying」に準拠していません

2-引数タイプ '文字列?'予期されるタイプ「NSSecureCoding」に準拠していません

これは、連絡先にメールを追加しようとしたときの私のコードです:

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

何か助けはありますか?

14
Zizoo

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]
}
33
OOPer

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))]
6
9BallOnTheSnap
 let workemail = "" //Your Input goes here
 let WorkEmail = CNLabeledValue(label:CNLabelWork, value: workmail as NSString)
 contact.emailAddresses = [WorkEmail]

Swift 3

3
BHAVIK PANCHAL