'NSFormatter'有多少隐约的子类? 知道其他人吗?
如果你使用Cocoa一段时间,你可能很熟悉NSDateFormatter
和NSNumberFormatter
。 它们可以方便地根据日期和数字创建格式化的显示字符串,或者将日期或数字字符串转换为数字值,同时支持不同的语言和区域设置。
几周前,我偶然发现了NSDateComponentsFormatter
,它可以让你创建格式化的时间间隔,比如“4小时37分17秒”。 很酷。
还有相关的NSDateIntervalFormatter
,它通过比较两个日期来创建字符串。
然后有一些非常模糊的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
令人烦恼的是,它看起来像许多这些格式化程序没有locale属性,所以使用它们来创建格式化字符串并非易事,因为这些语言/语言环境不是系统的默认语言环境。 如果我错过了什么,请告诉我。
其他人是否知道我错过的其他格式化程序? 这些都很晦涩,但如果你需要它们,可以为你节省很多时间。
编辑#2:
问题第2部分:是否有一种方法可以从格式化程序获取输出,该格式化程序在语言环境中缺少语言环境属性而不是系统缺省语言环境? 似乎很愚蠢的是,他们并不是都拥有并尊重当地的财产。 需要为当前语言环境以外的语言/语言环境生成输出很常见。
没有必要搜索。 NSFormatter
文档列出了它的所有子类。 在“继承自”块中查看页面的顶部。
请注意,此信息在Xcode 7.3文档阅读器中不可用。 它仅在联机文档中提供(或通过使用优秀的Dash阅读器)。
我进去了
/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
子类。
上一篇: How many obscure subclasses of `NSFormatter` are there? Know of any others?
下一篇: NSOutlineView won't reload data on keydown, but updates on focus