2016-07-11 19 views
6

スイフト2では、私はCNLabeledValue.localizedStringForLabel(phoneNumber.label)を使用しています。迅速な3ではswift3でCNLabeledValueのローカライズされた文字列を取得する方法

私はこのラインCNLabeledValue.localizedString(forLabel: phoneNumber.label!)を試みたが、swift3にCNLabeledValueためlocalizedstring取得する方法をgeneric parameter 'ValueType' could not be inferredエラー

を得ましたか。それは、一般的なタイプだと、あなたが適切なコンテキストでそれを使用する場合、あなたがしてvalueをキャストする必要がない

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

:スウィフト3、CNLabeledValue

答えて

23

は次のように宣言されています。スウィフト3は、ValueTypeを推定します。

しかし、あなたのコードでは、SwiftはValueTypeを推論する手がかりがありません。型メソッドの実行中にValueTypeが不必要なので迷惑です。しかし、スウィフトのタイプシステムはそれを指定する必要があります。 SwiftがValueTypeのタイプを推論できない場合は、明示的に指定することができます。

はこれを試してみてください:

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

あなたはむしろSTRING' ''よりNSString'を指定する必要がある理由上の任意の追加的な説明を提供することができますか? –

+2

@MurraySagal、 'CNLabeledValue'sジェネリックパラメータは' 'として宣言されています。したがって、この場合、 'NSCopying'と' NSSecureCoding'に準拠する任意の型を選択することができます。 'NSString'は行い、' String'は行いません。 – OOPer

+2

これを理解していただきありがとうございます。なぜXCodeのSwift 3 Converterの一部ではないのですか? –

関連する問題