1

为什么编码常量实现为只读变量而不是 Foundation 中的枚举?

public var NSUTF32StringEncoding: UInt { get }

public var NSUTF8StringEncoding: UInt { get }
4

2 回答 2

2

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 头文件。

于 2015-10-11T22:33:54.037 回答
0

接口与实现无关。例如下面的协议

protocol P {
    var value : Int { get }
}

可以这样实现:

struct S : P {
    let value = 0
}

因为该属性的唯一要求是可获取,它就是。

但是我不知道为什么它不是枚举,但我高度怀疑这是因为一些古老的 Objective-C 的东西。

编辑:也许是因为所有将参数UInt作为编码的方法,因为使用枚举这NSEncoding.Unicode.rawValue将激怒所有 Objective-C 人。

于 2015-10-11T22:31:10.393 回答