Swift 为什么NSString编码常量作为变量而不是枚举实现? 为什么在基?中,编码常量实现为只读变量而不是枚举变量? public var NSUTF32StringEncoding: UInt { get } public var NSUTF8StringEncoding: UInt { get }
接口与实现无关。例如,以下协议Swift 为什么NSString编码常量作为变量而不是枚举实现? 为什么在基?中,编码常量实现为只读变量而不是枚举变量? public var NSUTF32StringEncoding: UInt { get } public var NSUTF8StringEncoding: UInt { get },swift,nsstring,swift2.1,Swift,Nsstring,Swift2.1,接口与实现无关。例如,以下协议 protocol P { var value : Int { get } } 可以这样实现: struct S : P { let value = 0 } 因为该属性的唯一要求是可获取,而它是可获取的 然而,我不知道为什么它不是枚举,但我高度怀疑它是因为一些古老的Objective-C东西 编辑:可能是因为所有的方法都将一个参数UInt作为编码,因为对于枚举,这将是NSEncoding.Unicode.rawValue,这会激怒所有Object
protocol P {
var value : Int { get }
}
可以这样实现:
struct S : P {
let value = 0
}
因为该属性的唯一要求是可获取,而它是可获取的
然而,我不知道为什么它不是枚举,但我高度怀疑它是因为一些古老的Objective-C东西
编辑:可能是因为所有的方法都将一个参数UInt
作为编码,因为对于枚举,这将是NSEncoding.Unicode.rawValue
,这会激怒所有Objective-C人员。指出这一点(通常)NSENUM
注释的Cenums
的转换实际上是转换成Swiftenum
。我猜想,在这种情况下,丑陋的转换是由于未能遵守前缀命名约定。如果是NSStringEncodingUTF8
等,苹果可能会按照马特的模式制作Swift标题。考虑到这些常数有多古老,它们可能早于这些约定
特别是,缔约国:
枚举
默认情况下,Swift通过截断枚举值导入枚举
名称前缀
由于没有遵循前缀约定,如果他们直接导入Objective C报头,那么最终会出现类似NSStringEncoding.nsjapaneeucStringEncoding
这样的畸形,他们一定认为最好使用定制的Swift报头