为什么编码常量实现为只读变量而不是 Foundation 中的枚举?
public var NSUTF32StringEncoding: UInt { get }
public var NSUTF8StringEncoding: UInt { get }
http://nshipster.com/rawoptionsettype指出(通常)带NSENUM
注释的 C的转换enums
实际上是 Swift enum
。我推测这种情况下的丑陋转换是由于未能遵守前缀命名约定。如果是这样NSStringEncodingUTF8
,Apple 可能会让 Swift 标头遵循 Mattt 的模式。考虑到这些常数的历史,它们可能早于这样的约定。
特别是,https ://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html状态:
枚举
默认情况下,Swift 通过截断枚举值名称前缀来导入枚举。
由于没有遵循前缀约定,如果他们只是直接导入了 Objective C 头文件,他们最终会遇到类似的怪物NSStringEncoding.NSJapaneseEUCStringEncoding
,他们一定认为最好有一个量身定制的 Swift 头文件。
接口与实现无关。例如下面的协议
protocol P {
var value : Int { get }
}
可以这样实现:
struct S : P {
let value = 0
}
因为该属性的唯一要求是可获取,它就是。
但是我不知道为什么它不是枚举,但我高度怀疑这是因为一些古老的 Objective-C 的东西。
编辑:也许是因为所有将参数UInt
作为编码的方法,因为使用枚举这NSEncoding.Unicode.rawValue
将激怒所有 Objective-C 人。