Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 为什么文字比初始值设定项产生更高效的代码?_Swift_Performance_Casting_Initialization - Fatal编程技术网

Swift 为什么文字比初始值设定项产生更高效的代码?

Swift 为什么文字比初始值设定项产生更高效的代码?,swift,performance,casting,initialization,Swift,Performance,Casting,Initialization,我正在读一篇关于Swift的文章,上面写着: 在可能的情况下,与使用初始值设定项相比,更喜欢强制转换或强键入文本。初始值设定项添加一个额外的函数调用;强制转换在编译时处理。使用文字可以生成更高效的代码: 对我来说,第一种选择是纯粹的和好的 第二个选项首先初始化0,然后执行额外的强制转换操作 第三个选项只进行初始化,这很好 所以我不明白为什么第三个选项不被推荐,而第二个选项是 编辑: 既然Int有优先权,这个场景也会有相同的答案吗 let​ t: ​Int​ = 0 ​ 0 ​as​ ​

我正在读一篇关于Swift的文章,上面写着:

在可能的情况下,与使用初始值设定项相比,更喜欢强制转换或强键入文本。初始值设定项添加一个额外的函数调用;强制转换在编译时处理。使用文字可以生成更高效的代码:

对我来说,第一种选择是纯粹的和好的

第二个选项首先初始化0,然后执行额外的强制转换操作

第三个选项只进行初始化,这很好

所以我不明白为什么第三个选项不被推荐,而第二个选项是

编辑:

既然
Int
有优先权,这个场景也会有相同的答案吗

  let​ t: ​Int​ = 0 ​
   0 ​as​ ​Int​ ​​
   ​Int​(0) ​

as​ ​UInt8​不执行任何“额外铸造操作”


它只是一个关于如何解释整数文本的类型注释。

因为
Int
比其他
ExpressibleByIntegerLiteral
类型具有优先权。请参见此处:鉴于我们讨论的是文本的默认类型,可能还值得注意的是,给定文本的默认类型由当前模块中的“全局”XYZLiteralType的类型决定。您可以声明一个typealias来覆盖默认类型,例如在顶层定义
typealias IntegerLiteralType=UInt
会在定义该typealias的模块中为整数文本
UInt
创建默认类型。当您浏览Swift GitHub repo的docs目录时,您会学到一些疯狂的事情(在本例中,):D虽然我不会建议定义您自己的
XYZLiteralType
——但我可以想象由此产生的各种奇怪的混淆(特别是由于它使变更模块变得更宽)@Hamish我有点希望Swift有一个更狭隘的模块概念,更像Java包。哦,你实际上可以制作一个
XYZLiteralType
typealias
fileprivate
——这将它限制在给定的源文件(doh!)。我根据文档“当前模块范围上下文”的措辞假设这意味着它必须是
内部的
,但事实并非如此。但即使如此,我也不愿意使用它。
  let​ t: ​Int​ = 0 ​
   0 ​as​ ​Int​ ​​
   ​Int​(0) ​