2016-07-11 28 views

Odpowiedz

23

w Swift 3 CNLabeledValue jest zadeklarowana jako:

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

Jest to typ rodzajowy i jeśli używasz go w odpowiednim kontekście, nie masz potrzebę oddania value. Swift 3 well infers the ValueType.

Ale w twoim kodzie, Swift nie ma pojęcia, jak wywnioskować ValueType. Jest to trochę denerwujące, ponieważ ValueType jest niepotrzebne podczas wykonywania metody typu. Ale system typu Swift musi go określić. Jeśli Swift nie może wywnioskować typu ValueType, możesz go jawnie podać.

Spróbuj tego:

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

mogę podać żadnych dodatkowych wyjaśnień, dlaczego konieczne jest określenie 'NSString' zamiast' String'? –

+2

@MurraySagal, 'Ogólny parametr CNLabeledValue jest zadeklarowany jako' '. Tak więc w tym przypadku można wybrać dowolny typ, który jest zgodny z 'NSCopying' i' NSSecureCoding'. 'NSString' ma, a' String' nie. – OOPer

+2

Dziękuję za zrozumienie tego. Dlaczego nie jest częścią konwertera Swift 3 w XCode ucieka mnie ... –