4

NSDateFormatter 如果您使用 Cocoa 一段时间,您可能对和很熟悉NSNumberFormatter。它们可以方便地从日期和数字创建格式化的显示字符串,或者将日期或数字字符串转换为数值,同时支持不同的语言和区域设置。

几周前,我偶然发现了NSDateComponentsFormatter,它可以让您创建格式化的时间间隔,例如“4 小时 37 分钟 17 秒”。很酷。

还有 related NSDateIntervalFormatter,它通过比较 2 个日期来创建字符串。

然后有一些非常晦涩的 NSFormatter 子类:

NSMassFormatter
NSByteCountFormatter
NSLengthFormatter
NSEnergyFormatter
NSPersonNameComponentsFormatter

编辑:

从评论中,我添加了NSPersonNameComponentsFormatter.

在 Xcode 帮助系统中搜索“NS*Formatter”会发现其中的大部分,但不是全部。(看起来必须正确索引帮助文本才能进行搜索,这很烦人。)

这使我能够找到的总数

NSDateIntervalFormatter    -Difference between 2 dates
NSDateComponentsFormatter  -NSDateComponents to/from string
NSDateFormatter            -Formats NSDates as strings
NSNumberFormatter          -Formats numbers as strings
NSMassFormatter            -Formats mass quantity as strings 
NSByteCountFormatter       -Formats byte counts in K, MB, GB, etc.
NSLengthFormatter          -Formats length values
NSEnergyFormatter          -Displays energy qualities in Joules or Calories
NSPersonNameComponentsFormatter - displays localized formatted names

令人讨厌的是,这些格式化程序中的许多似乎都没有语言环境属性,因此使用它们在系统默认语言环境之外的语言/语言环境中创建格式化字符串并不是很容易。如果我遗漏了什么,请告诉我。

还有其他人知道我缺少的其他格式化程序吗?这些非常晦涩难懂,但如果您需要它们,可以为您节省大量时间。

编辑#2:

问题第 2 部分:有没有办法从在系统默认区域设置以外的区域设置中缺少区域设置属性的格式化程序获取输出?他们并不都拥有和尊重一个地区财产,这似乎很愚蠢。需要为当前语言环境以外的语言/语言环境生成输出是很常见的。

4

2 回答 2

5

没有必要搜索。该NSFormatter文档列出了它的所有子类。查看页面顶部的“继承自”块。

在此处输入图像描述

请注意,此信息在 Xcode 7.3 文档阅读器中不可用。它仅在在线文档中可用(或通过使用优秀的Dash 阅读器)。

于 2016-04-10T14:21:00.383 回答
2

我走进

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks

然后做了

for header in **/*.h; do ack -o 'NSFormatter' "$header"; done

这给了我一些有趣的:

NSPersonNameComponentsFormatter
CNContactFormatter
CNPostalAddressFormatter
DRMSFFormatter
MKDistanceFormatter

做同样的iPhoneOS.sdk事情并没有出现任何新的NSFormatter子类。

于 2016-04-10T13:55:33.030 回答