Не могу понять, как лечить типы дженериков и как использовать аргументы с неопределенных типов с библиотеками:«Невозможно преобразовать значение типа„Т“...» в дженериков
func cellWith<T>(value: T) -> String { // I expect Int, Double or String
// type value as argument
let fm = NSNumberFormatter() // Double type argument will be
fm.numberStyle = .CurrencyStyle // processed like "currency"
if value.self is Double { // In case value have type "Double",
// like 20_000.00
return(fm.stringFromNumber(value)) // I expect return $20,000.00
^~~~~
// ERROR: Cannot convert value of type 'T' to expected argument type 'NSNumber'
} else {
return("bla-bla-bla")
}
}
Возможно, вы захотите использовать 'Any' вместо общего метода. Во всяком случае, вы делаете это быстро, делая это, если пусть doubleValue = значение as? Double {... use} '. См. Https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html – Kevin
, он работает с 'return (fm.stringFromNumber (NSNumber (double: doubleValue))!). Я не знаю, но почему я должен развернуть значение String в конце? –
Потому что 'stringFromNumber (_ :)' не гарантированно возвращает значение non-nil, но ваш метод есть. – avismara