有多少晦涩的`NSFormatter`子类?知道其他人吗?

时间:2016-04-10 13:32:22

标签: ios macos cocoa nsformatter

如果你有一段时间使用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

令人讨厌的是,看起来这些格式化程序中的许多都没有语言环境属性,所以使用它们来创建除系统默认语言环境之外的语言/语言环境中的格式化字符串并不是一件容易的事。如果我遗失了什么,请告诉我。

是否有其他人知道我缺少的其他格式化程序?这些都很模糊,但如果你需要它们可以节省很多时间。

编辑#2:

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

2 个答案:

答案 0 :(得分:5)

无需搜索。 NSFormatter documentation列出了它的所有子类。查看页面顶部的“继承自”块。

enter image description here

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

答案 1 :(得分: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子类。