【发布时间】:2016-03-31 03:37:19
【问题描述】:
无法理解如何处理泛型类型以及如何将参数与库中的未定义类型一起使用:
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而不是泛型方法。无论如何,您可以通过if let doubleValue = value as? Double { ...use }快速投入。见developer.apple.com/library/ios/documentation/Swift/Conceptual/… -
它适用于
return(fm.stringFromNumber(NSNumber(double:doubleValue))!)。我不知道,但是为什么我要在最后解开 String 值呢? -
因为
stringFromNumber(_:)不能保证返回非零值,但你的方法是。
标签: swift generics types casting