2016-07-11 42 views
6

在swift 2中我使用的是CNLabeledValue.localizedStringForLabel(phoneNumber.label),并且正常工作。如何在swift3中获取CNLabeledValue的本地化字符串

在SWIFT 3我想这条线CNLabeledValue.localizedString(forLabel: phoneNumber.label!)但得到generic parameter 'ValueType' could not be inferred错误

如何获得在swift3 localizedstring为CNLabeledValue?

回答

23

在斯威夫特3,CNLabeledValue声明为:

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

这是一个泛型类型,如果你在一个适当的环境中使用它,你就没有必要投其value。 Swift 3很好地推断了ValueType

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

试试这个:

let localizedLabel = CNLabeledValue<NSString>.localizedString(forLabel: phoneNumber.label!) 
+0

你能否提供关于为什么有必要指定'NSString'而不是'String'任何其他的解释吗? –

+2

@MurraySagal,'CNLabeledValue'的通用参数被声明为''。因此,在这种情况下,您可以选择符合'NSCopying'和'NSSecureCoding'的任何类型。 'NSString'和'String'不一样。 – OOPer

+2

谢谢你解决这个问题。为什么它不是XCode中Swift 3 Converter的一部分让我感到... –

相关问题