假设我有以下内容:
我希望能够支持尽可能多的Swift/Mac数字类型,例如CGFloat NSNumber Int Float等。但我不想重复自己(复制粘贴并扩展所有内容)或者在使用该函数时进行强制转换。
我尝试扩展像FloatLiteralType/Convertible这样的协议,但仍需要进行强制转换。更方便地扩展基本类型“应该”是可能的...
我也考虑过全局函数,但它们不太容易发现,感觉更像是一种hack。
在Swift中有没有好的方法来实现这个需求?
extension NSNumber{
func toLocalCurrency(fractDigits:Int = 2)->String{
let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
let userSettings:UserInfo? = UserInfo.first(sortDescriptors: nil, context: AERecord.defaultContext) as? UserInfo
if let code = userSettings?.currency.name_short {
formatter.currencyCode = code
}
formatter.maximumFractionDigits = fractDigits
return formatter.stringFromNumber(self)!
}
func toLocalCurrencyWithoutFractionDigits()->String{
return self.toLocalCurrency(fractDigits: 0)
}
}
我希望能够支持尽可能多的Swift/Mac数字类型,例如CGFloat NSNumber Int Float等。但我不想重复自己(复制粘贴并扩展所有内容)或者在使用该函数时进行强制转换。
我尝试扩展像FloatLiteralType/Convertible这样的协议,但仍需要进行强制转换。更方便地扩展基本类型“应该”是可能的...
我也考虑过全局函数,但它们不太容易发现,感觉更像是一种hack。
在Swift中有没有好的方法来实现这个需求?
AnyObject
的更好的替代方案。 - ABakerSmith