Как получить локализованную строку для CNLabeledValue в swift3

В swift 2 я используюCNLabeledValue.localizedStringForLabel(phoneNumber.label) и работает нормально.

В swift 3 я попробовал эту строчкуCNLabeledValue.localizedString(forLabel: phoneNumber.label!) но получилgeneric parameter 'ValueType' could not be inferred ошибка

Как получить локализованную строку для CNLabeledValue в swift3?

Ответы на вопрос(1)

Решение Вопроса

В Свифте 3CNLabeledValue объявлен как:

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

Это универсальный тип, и если вы используете его в надлежащем контексте, вам не нужно разыгрывать егоvalue, Swift 3 хорошо выводитValueType.

Но в вашем коде Swift не имеет ни малейшего понятияValueType, Это немного раздражает, потому чтоValueType не нужно при выполнении метода типа. Но система типов Swift должна быть указана. Если Свифт не может вывести типValueTypeВы можете явно дать это.

Попробуй это:

 let localizedLabel = CNLabeledValue<NSString>.localizedString(forLabel: phoneNumber.label!)
 Murray Sagal19 сент. 2016 г., 15:57
Можете ли вы предоставить какое-либо дополнительное объяснение того, почему необходимо указатьNSString скорее, чемString?
 OOPer19 сент. 2016 г., 22:02
@MurraySagal,CNLabeledValueОбщий параметр s объявлен как<ValueType : NSCopying, NSSecureCoding>, Таким образом, в этом случае вы можете выбрать любой тип, который соответствуетNSCopying а такжеNSSecureCoding. NSString делает иString не.
 Joshua Pinter09 окт. 2016 г., 20:57
For Спасибо, что выяснили это. Почему он не является частью Swift 3 Converter в XCode ускользает от меня ...

Ваш ответ на вопрос