UILabel 显示 1k 表示 int 值 1000 和 2k 表示 2000 等等
UILabel to show 1k for int value 1000 and 2k for 2000 and so on
我有 UILabel
,其中显示了 int
值,我希望如果值以千为单位,例如 1000,那么标签应该在 2000 年及以后显示 1k 和 2k。如何实现?
这个怎么样?
int myNum = 12345;
NSLog(@"%.1f K", myNum/1000);
有两种方法,甚至三种。
第一名
在标签中设置值之前,您可以通过编程方式执行此操作。
第二名
您通过 setter 为 int 值扩展 UILabel,该值执行格式化并设置适当的字符串值。
第三
您将 UILabel 子类化并为 int 值添加 setter 。这会进行格式化并设置适当的字符串。
扩展的工作量少一些,但子类化允许覆盖常规 setter 以便您可以抛出异常或任何您想要的。
这三者都有一个共同点:您必须以编程方式进行格式化。 (整数除以 1000,然后使用常规字符串格式)
扩展或继承 UILabel
使解决方案可重用。
允许将数字格式化为单词的扩展 -> 1.000 = 1K 1.500 -> 1.5K 1.000.000 -> 1M。
用法:myInt.abbreviateNumber()
extension Int {
func abbreviateNumber() -> String {
if self < 1000 {
return "\(self)"
}
if self < 1000000 {
var n = Double(self);
n = Double( floor(n/100)/10 )
return "\(n.description)K"
}
var n = Double(self)
n = Double( floor(n/100000)/10 )
return "\(n.description)M"
}
}
我有 UILabel
,其中显示了 int
值,我希望如果值以千为单位,例如 1000,那么标签应该在 2000 年及以后显示 1k 和 2k。如何实现?
这个怎么样?
int myNum = 12345;
NSLog(@"%.1f K", myNum/1000);
有两种方法,甚至三种。
第一名 在标签中设置值之前,您可以通过编程方式执行此操作。
第二名 您通过 setter 为 int 值扩展 UILabel,该值执行格式化并设置适当的字符串值。
第三 您将 UILabel 子类化并为 int 值添加 setter 。这会进行格式化并设置适当的字符串。 扩展的工作量少一些,但子类化允许覆盖常规 setter 以便您可以抛出异常或任何您想要的。
这三者都有一个共同点:您必须以编程方式进行格式化。 (整数除以 1000,然后使用常规字符串格式)
扩展或继承 UILabel
使解决方案可重用。
允许将数字格式化为单词的扩展 -> 1.000 = 1K 1.500 -> 1.5K 1.000.000 -> 1M。 用法:myInt.abbreviateNumber()
extension Int {
func abbreviateNumber() -> String {
if self < 1000 {
return "\(self)"
}
if self < 1000000 {
var n = Double(self);
n = Double( floor(n/100)/10 )
return "\(n.description)K"
}
var n = Double(self)
n = Double( floor(n/100000)/10 )
return "\(n.description)M"
}
}