如何在swift3中获取CNLabeledValue的localizedstring

Ald*_*rdi 7 ios swift cncontact swift3

在swift 2中我使用CNLabeledValue.localizedStringForLabel(phoneNumber.label)并且工作正常.

在swift 3中,我尝试了这一行,CNLabeledValue.localizedString(forLabel: phoneNumber.label!)但是遇到了generic parameter 'ValueType' could not be inferred错误

如何在swift3中获取CNLabeledValue的localizedstring?

OOP*_*Per 29

在Swift 3中,CNLabeledValue声明为:

public class CNLabeledValue<ValueType : NSCopying, NSSecureCoding> : NSObject, NSCopying, NSSecureCoding {
    //...
}
Run Code Online (Sandbox Code Playgroud)

它是一个泛型类型,如果你在适当的上下文中使用它,你就没有必要强制它value.Swift 3很好地推断了ValueType.

但是在你的代码中,Swift无法推断出ValueType.这有点烦人,因为ValueType在执行类型方法时是不必要的.但是Swift的类型系统需要指定它.如果Swift无法推断出它的类型ValueType,你可以明确地给出它.

试试这个:

 let localizedLabel = CNLabeledValue<NSString>.localizedString(forLabel: phoneNumber.label!)
Run Code Online (Sandbox Code Playgroud)

  • @MurraySagal,`CNLabeledValue的泛型参数声明为`<ValueType:NSCopying,NSSecureCoding>`.因此,在这种情况下,您可以选择符合"NSCopying"和"NSSecureCoding"的任何类型.`NSString`和`String`没有. (2认同)
  • 谢谢你搞清楚这一点.为什么它不是XCode中的Swift 3转换器的一部分让我逃脱... (2认同)