如何使用闭包初始化来加速 Swift 的 playground

如何使用闭包初始化来加速 Swift 的 playground,第1张

概述作者:Erica Sadun,原文链接,原文日期:2015-11-15 译者:JackAlan;校对:小铁匠Linus;定稿:千叶知风 Swift 的 Playground 可能会莫名其妙地变慢,尤其当你使用 SpriteKit 或 SceneKit 时。尽可能的把代码迁移到外部资源文件中,可以优化编译并获得更好的运行时速度。 这种方法的最大问题在于,你会因此失去在 Playground 中的线性

作者:Erica Sadun,原文链接,原文日期:2015-11-15
译者:JackAlan;校对:小铁匠Linus;定稿:千叶知风

Swift 的 Playground 可能会莫名其妙地变慢,尤其当你使用 SpriteKit 或 SceneKit 时。尽可能的把代码迁移到外部资源文件中,可以优化编译并获得更好的运行时速度。

这种方法的最大问题在于,你会因此失去在 Playground 中的线性流 linear flow。模块编译不支持修改变量的顶层指令。比如,你有类似如下的代码:

public let lightNode = SCNNode()lightNode.light = SCNlight()lightNode.light!.type = SCNlightTypeOmnilightNode.position = SCNVector3(x: 0,y: 10,z: 10)scnscene.rootNode.addChildNode(lightNode)

(我很抱歉使用强制解包,但是这是来自苹果的示例代码。)

你不能将这些代码直接移到一个模块文件中,因为你使用的是顶级调用,这些代码不会在外部 Swift 文件中被编译。你可能会把这些代码放在一个函数里,来作为一种变通的方法,例如:

internal func setuplightNode() -> SCNNode {let thelight = SCNNode()thelight.light = SCNlight()thelight.light!.type = SCNlightTypeOmnithelight.position = SCNVector3(x: 0,z: 10)scnscene.rootNode.addChildNode(thelight)return thelight}

然后你可以在声明后调用该函数:

let lightNode = setuplightNode()

这挫爆了,这种方式创建了一个不必要的额外函数,而且它强制让你在一个新的实例被声明前去处理这个实例。

闭包提供了一种更吸引人、相对轻量的解决方案。正如下面你将看到的样例。在这里,将初始化的代码打包在一个单独的组中,执行并最终返回完全初始化的实例。

// create and add a light to the scenepublic let lightNode: SCNNode = {  let thelight = SCNNode()  thelight.light = SCNlight()  thelight.light!.type = SCNlightTypeOmni  thelight.position = SCNVector3(x: 0,z: 10)  scnscene.rootNode.addChildNode(thelight)  return thelight}()

这种方法使你可以使用单独的语句来创建和初始化一个对象,保留你在 Playground 中声明的流动性和可读性,而且运行的会更快一点。

这个视频包含了这次 lightNode 的代码与其他设置 *** 作。在点击 Playground 的 “运行” 按钮后,只花了 3-4 秒,而不像此前的数分钟。这种加速方法对于建立以 SpriteKit 和 SceneKit 为元素的原型,在部署到实际的应用前,变得更有实际意义。

更新:如下是另外一种可以建立类实例的方法:

infix operator •-> {}// prepare class instancefunc •-> <T>(object: T,f: (T) -> VoID) -> T {  f(object)  return object}class MyClass {var (x,y,z) = ("x","y","z")}let myInstance = MyClass() •-> { .x = "NewX" .y = "NewY"}

不知你意下如何?

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。

总结

以上是内存溢出为你收集整理的如何使用闭包初始化来加速 Swift 的 playground全部内容,希望文章能够帮你解决如何使用闭包初始化来加速 Swift 的 playground所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1091207.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存