Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么NSString编码常量作为变量而不是枚举实现? 为什么在基?中,编码常量实现为只读变量而不是枚举变量? public var NSUTF32StringEncoding: UInt { get } public var NSUTF8StringEncoding: UInt { get }_Swift_Nsstring_Swift2.1 - Fatal编程技术网

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
注释的C
enums
的转换实际上是转换成Swift
enum
。我猜想,在这种情况下,丑陋的转换是由于未能遵守前缀命名约定。如果是
NSStringEncodingUTF8
等,苹果可能会按照马特的模式制作Swift标题。考虑到这些常数有多古老,它们可能早于这些约定

特别是,缔约国:

枚举

默认情况下,Swift通过截断枚举值导入枚举 名称前缀

由于没有遵循前缀约定,如果他们直接导入Objective C报头,那么最终会出现类似
NSStringEncoding.nsjapaneeucStringEncoding
这样的畸形,他们一定认为最好使用定制的Swift报头