Ios 为什么人们在CGFloat上添加.0?

Ios 为什么人们在CGFloat上添加.0?,ios,swift,cgfloat,Ios,Swift,Cgfloat,在本教程中 button.widthAnchor.constraint(equalToConstant: 44.0).isActive = true 常量类型为“44.0”而不是“44” 他们之间有什么区别吗 我测量了这些方法的时间 func evaluateProblem(problemNumber: Int, problemBlock: () -> Void) { print("Evaluating problem \(problemNumber)") let st

在本教程中

button.widthAnchor.constraint(equalToConstant: 44.0).isActive = true
常量类型为“44.0”而不是“44”

他们之间有什么区别吗

我测量了这些方法的时间

func evaluateProblem(problemNumber: Int, problemBlock: () -> Void)
{
    print("Evaluating problem \(problemNumber)")

    let start = DispatchTime.now() // <<<<<<<<<< Start time
    let end = DispatchTime.now()   // <<<<<<<<<<   end time

    let nanoTime = end.uptimeNanoseconds - start.uptimeNanoseconds // <<<<< Difference in nano seconds (UInt64)

    print("Time to evaluate problem \(problemNumber): \(nanoTime)")
}

evaluateProblem(problemNumber: 2) {
    let b: CGFloat = 44
    print(b)
}

evaluateProblem(problemNumber: 1) {
    let a: CGFloat = 44.0
    print(a)
}
func evaluateProblem(problemNumber:Int,problemBlock:()->Void)
{
打印(“评估问题\(问题编号)”)

让start=DispatchTime.now()/您可以使用整数文本初始化
Double
Float
CGFloat
Int
等,因为上述所有内容都符合协议。使用文本的幕后初始化只需调用一致类型的
init(integerLiteral:)
方法

同样,有一个协议处理浮点文本的初始化,该协议有一个初始值设定项,该初始值设定项也必须由一致类型实现


至于使用哪一种,这是个人偏好和风格的问题。两种初始化方式都是有效的,除非您进行数千次初始化,否则性能差异将是微不足道的。

您的代码似乎没有实际运行该块,或者我遗漏了一些东西。仅运行一次检查也不会产生任何效果你可以得到任何合理的结果。如果需要,编译器也会转换常量。在代码中放置浮点数/双精度是很常见的,而不是整数。没有区别,这只是一个好习惯。有助于更清晰的语法。@DavidH不是这样;它编译为
CGFloat
,这是因为Rob的答案。Swift没有隐式转换;如果它没有好吧,这就是正在发生的事情,它实际上是一个工作中的
expressiby
。我可能会添加IIRC,Swift的早期版本(可能通过swift2.x?)在没有小数点的情况下,我们还没有能力推断出正确的类型。也许这是IntegerLiteral在技术上实现的结果,但Swift语言在最初的5年左右经历了如此巨大的变化,有时对这样一个问题的最佳答案是“你曾经被迫加1.0来推断整数上的浮点数,但现在不是了”。@dfd我认为你通过Swift 2.x进行初始化是正确的,但你的答案似乎没有说明为什么人们在初始化时仍然使用小数。这就是为什么我没有回答,但评论道:-)我可以想到两个可能的原因,可能还有更多。(1)要么是习惯的力量,OP正在寻找过时的代码,要么是编码的人有其他语言的背景,比如GLSL,它确实需要浮点数的小数点可读性。小数点意味着在
Int
上有一定的精度。想想第三个-使用上面的例子,假设有限制-可能是在
按钮上,但可能是在同一个应用程序中的不同屏幕上的视图-实际上有一个比44.0更精确的常数?