LabeledValue является универсальным. Два разных типа LabeledValue (то есть один и тот же общий тип, разрешенный двумя разными способами, CNLabeledValue<NSString>
и CNLabeledValue<CNPhoneNumber>
) являются разными типами и не могут храниться в общем свойстве. Это ничем не отличается от того факта, что [Int]
и [String]
- это два разных типа, даже если они оба являются массивами.
Единственный способ сохранить два разных типа LabeledValue в одном свойстве - это ввести это свойство как AnyObject. Таким образом, это работает:
var currentContact : AnyObject? = nil
let phoneNumber = CNPhoneNumber(stringValue: "1234567890")
let labelled = CNLabeledValue(label: "yoho", value: phoneNumber)
currentContact = labelled
let email = CNLabeledValue(label: "hoha", value: "mickey@mouse.com" as NSString)
currentContact = email
Однако я не рекомендую это делать. Вместо этого, поскольку все, что вам действительно нужно, это строка, сделайте ваше currentContact
помеченным значением, заключающим NSString:
var currentContact : CNLabeledValue<NSString>? = nil
Вы можете сохранить электронную почту CNLabeledValue непосредственно в нее. Для номера телефона введите новое значение с меткой из строкового значения номера телефона:
currentContact = CNLabeledValue(
label:phone.label, value:phone.value.stringValue as NSString)