gpt4 book ai didi

objective-c - 现有的用于处理人类可读性的 Objective-C 库(并且基于 Cocoa 的 Foundation 框架)?

转载 作者:行者123 更新时间:2023-12-03 16:39:37 24 4
gpt4 key购买 nike

是否有现有的 Objective-C 库来处理对象计数、文件大小、日期、持续时间等的人类可读性? (并且基于 Cocoa 的 Foundation 框架?)

换句话说,给定一个 NSDate、NSNumber、NSTimeInterval 等或一个 NSArray 对象;是否有一个用于构建字符串表示形式的库来处理以下问题:

  • 计算单数与复数:显示“2 个文件”、“3 个文件”等,但显示“1 个文件”而不是“1 个文件”。
  • 日期:显示“昨天”而不是“2010-02-18”、“上周一”而不是“2010-02-15”等等。
  • 持续时间:显示“预计剩余时间:约一小时”而不是“...:57 分钟”。
  • 文件大小:50 字节显示“50 字节”,1073741824 字节显示“1.0 GiB”,依此类推。

这似乎是一个图书馆必然已经存在的常见问题;甚至可能已经是苹果提供的标准框架(尽管我无法立即找到有关它的任何内容)。问题是哪里? ;)

<小时/>

注意:这实际上是对 dreamlax 答案的评论,但作为评论发布太长了。

感谢您提供 MDC 文章的链接。我确实意识到这可能是一个相当复杂的问题;即使只考虑英语,更不用说多种语言了。

话又说回来,这是一个如此复杂的问题,这一事实更加说明我想要一个能够解决某些问题的库。 ;)

文件大小确实看起来是最简单的,但即使这样也很容易出错。请考虑以下代码输出,作为本网站上类似问题的答案。第一个代码奇怪地将 1023 字节报告为 1.0 KB。第二个报告 (1024 * 1024) - 1 字节为 1024.00 KB,而第一个报告为 1.0 MB。根据 Calculator.app,(1024 * 1024) - 1 字节约为 1.023,9990234375 KB。那么应该显示为“1023,99 KB”、“1024,00 KB”、“1.0 MB”,...?我不确定。

今天早些时候,我快速编写了一些代码来转换文件大小,然后在为其编写单元测试时意识到它存在类似的问题。

如果有一个已经对此进行过深思熟虑的库,那就太好了......

1022 bytes              = 1022 bytes
1023 bytes = 1.0 KB
1024 bytes = 1.0 KB
1025 bytes = 1.0 KB
(1024 * 1024) - 1 bytes = 1.0 MB
(1024 * 1024) bytes = 1.0 MB
(1024 * 1024) + 1 bytes = 1.0 MB

[ 输出代码来自 ObjC/Cocoa class for converting size to human-readable string? ]

1022 bytes              = 1022.00 B
1023 bytes = 1023.00 B
1024 bytes = 1024.00 B
1025 bytes = 1.00 KB
(1024 * 1024) - 1 bytes = 1024.00 KB
(1024 * 1024) bytes = 1024.00 KB
(1024 * 1024) + 1 bytes = 1.00 MB

[ 输出代码来自 File size in Snow Leopard ]

产生上述输出的代码(相当明显,但仅供引用):

NSLog(@"1022 bytes              = %@", [self asFileSizeString: [NSNumber numberWithInt: 1022]]);
NSLog(@"1023 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: 1023]]);
NSLog(@"1024 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: 1024]]);
NSLog(@"1025 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: 1025]]);
NSLog(@"(1024 * 1024) - 1 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: (1024 * 1024) - 1]]);
NSLog(@"(1024 * 1024) bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: (1024 * 1024)]]);
NSLog(@"(1024 * 1024) + 1 bytes = %@", [self asFileSizeString: [NSNumber numberWithInt: (1024 * 1024) + 1]]);

最佳答案

关于多元化;这并不像人们想象的那么容易,尤其是在考虑其他语言时。 MDC有个好article on this issue .

另外,在英语中,没有“前天”一词,但在西类牙语中,可以使用“anteayer”一词。当您只考虑英语时,这似乎很简单,但是当您必须考虑许多不同的语言及其表示相对时间的方式时,它很快就会变得复杂。

最直接的是文件大小。这些可以使用 NSNumberFormatter 进行格式化。 。数字格式化程序在确定如何表示数字时会考虑用户的区域设置。这变得更容易,因为单位在每种语言中的表示方式相同,数字也是如此。小数分隔符和/或千位分隔符由数字格式化程序处理。

关于objective-c - 现有的用于处理人类可读性的 Objective-C 库(并且基于 Cocoa 的 Foundation 框架)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com