有多少 NSFormatter 的晦涩子类?知道其他人吗?
How many obscure subclasses of `NSFormatter` are there? Know of any others?
如果您使用 Cocoa 一段时间,您可能熟悉 NSDateFormatter
和 NSNumberFormatter
。它们可以方便地从日期和数字创建格式化显示字符串,或者将日期或数字字符串转换为数值,同时支持不同的语言和区域设置。
几周前我偶然发现了 NSDateComponentsFormatter
,它可以让您创建格式化的时间间隔,例如“4 小时 37 分 17 秒”。很酷。
还有相关的 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
令人恼火的是,这些格式化程序中的许多看起来都没有语言环境 属性,因此使用它们在 languages/locales 中创建格式化字符串并不是很容易,而不是系统的默认语言环境.如果我遗漏了什么,请告诉我。
还有其他人知道我缺少的其他格式化程序吗?这些非常晦涩,但如果您需要它们,可以为您节省很多时间。
编辑#2:
问题第 2 部分:有没有一种方法可以从缺少区域设置 属性 而非系统默认区域设置的格式化程序中获取输出?他们并不都拥有并尊重语言环境属性,这似乎很愚蠢。需要为当前区域设置以外的 languages/locales 生成输出是很常见的。
我进入了
/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
子类。
无需搜索。 NSFormatter
documentation 列出了它的所有子类。查看页面顶部,在 "inherits from" 块中。
请注意,此信息在 Xcode 7.3 文档 reader 中不可用。它仅在在线文档中可用(或通过使用优秀的 Dash reader)。
如果您使用 Cocoa 一段时间,您可能熟悉 NSDateFormatter
和 NSNumberFormatter
。它们可以方便地从日期和数字创建格式化显示字符串,或者将日期或数字字符串转换为数值,同时支持不同的语言和区域设置。
几周前我偶然发现了 NSDateComponentsFormatter
,它可以让您创建格式化的时间间隔,例如“4 小时 37 分 17 秒”。很酷。
还有相关的 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
令人恼火的是,这些格式化程序中的许多看起来都没有语言环境 属性,因此使用它们在 languages/locales 中创建格式化字符串并不是很容易,而不是系统的默认语言环境.如果我遗漏了什么,请告诉我。
还有其他人知道我缺少的其他格式化程序吗?这些非常晦涩,但如果您需要它们,可以为您节省很多时间。
编辑#2:
问题第 2 部分:有没有一种方法可以从缺少区域设置 属性 而非系统默认区域设置的格式化程序中获取输出?他们并不都拥有并尊重语言环境属性,这似乎很愚蠢。需要为当前区域设置以外的 languages/locales 生成输出是很常见的。
我进入了
/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
子类。
无需搜索。 NSFormatter
documentation 列出了它的所有子类。查看页面顶部,在 "inherits from" 块中。
请注意,此信息在 Xcode 7.3 文档 reader 中不可用。它仅在在线文档中可用(或通过使用优秀的 Dash reader)。