繁体   English   中英

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

[英]Why people add .0 on CGFloat?

https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ImplementingACustomControl.html#//apple_ref/doc/uid/TP40015214-CH19-SW1在本教程中,

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)
}

但更快的不是固定的。

您可以使用 integer 文字初始化DoubleFloatCGFloatInt等,因为上述所有内容都符合ExpressibleByIntegerLiteral协议。 在幕后使用字面量初始化只需调用符合类型的init(integerLiteral:)方法。

同样,有一个ExpressibleByFloatLiteral协议处理浮点字面量的初始化,并且该协议有一个初始化器,它也必须由符合类型实现。

至于使用哪个,这是个人喜好和风格的问题。 两种初始化方式都是有效的,除非您进行数千次初始化,否则性能差异可以忽略不计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM