- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有没有办法提高 playground 的执行速度?我想迭代很多周期而不是等待 10 分钟。
例如:
import UIKit
var count = 0
for var i = 0; i < 1000000000; i++ {
count++
}
这段代码执行的时间太长了。但我想快速得到结果。
最佳答案
最大的性能 killer 之一是 Playground 右侧的输出。现在我将向您展示如何最小化此输出。
请参阅最后的示例代码。
最高效的方法是将所有性能关键代码放在 playground 的 Sources
文件夹内的 .swift
文件中。
注意:为了使用Sources
文件夹中的函数、类、属性和方法,您必须将它们标记为public
。如果你想继承一个类,它必须被标记为open
。
以下方法(我认为这不是官方/预期的)可用于禁用 Playground 输出,但也会导致难看的代码。然而,暂时禁用输出是有好处的。
有两种主要方法(和两种技巧)可以实现最小输出量(如果您找到更好的方法请告诉我们):
在 Void
(或 Void?
)表达式周围使用括号,如赋值(通常不会产生任何输出,另见 3.)。
var x = 0 // output: 0
(x = 1) // NO output
(x = 2 * x - 1) // NO output
(x.negate()) // NO output
注意:在 Swift 中,赋值返回 Void
并且在 optional chaining 的情况下它是 Void?
。
var x: (Int, Int)? = nil
if (x?.0 = 0) != nil {
// assignment was successful (x!=0 and now x=(0, x.1))
} else {
// assignment was not successful (x==nil)
}
分别初始化和声明变量。
var x: Int // NO output
(x = 0) // NO output
如果 1. 不起作用,请在 ()
上方或下方添加额外的 no-op(无操作)行。
这发生在单行闭包中(并且可能在其他一些上下文中)例如:(另请参见下面的代码)
[1, 4, 5, 6].mmap{
() // without this line the line below would yield to an output
($1 = $0 + 1)
} as [Int]
您也可以使用所有表达式的元组,然后将其分配给一个变量,而不是将每一行都用括号括起来:
var a: Any // this may be a useful definition in this context
var x: Int
var y: Int
(a = (x = 0,
y = 1,
x = y + 1,
y = x*x))
然而,这可能会导致缩进灾难......
哪里不起作用(我找不到删除输出的方法;此列表可能不完整):
在函数和闭包中返回
可选
变量,例如:var x: Int?
Sequence
上的新 map
方法示例用法:见上文第 3 点。
Sequence.map
的签名是
func map<T>(_ transform: (Self.Element) throws -> T) rethrows -> [T]
由于我还没有找到一种方法来删除 return
的输出,因此可以使用带有 inout
参数的闭包(使用任务)。一个可能的签名可能是:
func mmap<U>(_ transform: (Element, inout U?) -> ()) -> [U]
所以我们可以在 inout
参数中传递 nil
,因为它是每个可能的 U
的良好默认值,而不会对 施加约束>U
这可能需要一个实例生成器(例如:init() { ... }
)。
不幸的是,Swfit 很难推断出 U
,因此您需要使用显式类型注释来帮助编译器。另外 var newElement: U?
does 在边栏中返回 nil
。
现在我将使用 Any
而不是 U?
:
extension Sequence {
// ATTENTION: this is not as performant as the normal `map`!
func mmap<U>(transform: (Element, inout Any) -> ()) -> [U] {
var result: [U]
(result = [U]())
for element in self {
var newElement: Any
(newElement = 0) // some placeholder element
(transform(element, &newElement))
// assume the inout element to be of type `U`
(result.append(newElement as! U))
}
return result // the ONLY output in this method
}
}
使用 swift 4
var count = 0
for i in 0..<1_000_000_000 {
(count += 1)
if count % 100_000 == 0 {
// print only every 100_000th loop iteration
print(count)
}
}
没有括号:每秒大约 10.000 次循环迭代
带括号:每秒约 10.000.000 次循环迭代!!!
关于ios - Swift playground 执行速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26073192/
最初我读到你不能在操场上尝试触摸或手势。然后我发现 touchesMoved 或点击手势会使用react。但是,我现在正在测试 UIPinchGestureRecognizer。没有可以让您在操场上使
我最近尝试打开/编辑 .playgroundbook project在 Xcode 版本 8.3.2 (8E2002) 中,有点惊讶它没有作为“liveView Playground”打开(我意识到它
我想在 Xcode 6.0.1 中使用 playground。所以文件 -> 新建 -> Playground 我立即得到错误。 Playground 执行终止,因为 Playground 进程意外退
在 Xcode 7 playgrounds 中运行最简单的默认代码...得到以下错误 Playground execution failed: Execution was interrupted, r
我已经开始了 Swift 编程入门类(class),到目前为止进展顺利,但我无法使用 Mac 来运行 Xcode。我确实有 iPad 版 Swift Playgrounds,它允许我完成作业并测试它们
GuidedTour Playground包含交互式和非交互式元素以及格式良好的文本。文本似乎已被锁定,无法编辑。我发现它是一个很好的学习工具。是否可以编辑其内容或创建类似的内容? 最佳答案 Play
我在 Xcode Playground 和 Swift Playground 上运行这段代码: import SwiftUI import PlaygroundSupport struct Conte
我正在 Xcode Playground 上玩弄 REST API,我需要用 SHA1 散列一些东西。我找到的所有解决方案都依赖于 Common Crypto,而这似乎不能直接在 Swift play
我知道如何在常规应用程序项目中使用 Xcode 11 中的 SwiftUI,但我想知道即使我不能使用实时编辑器,是否也可以在 playgrounds 中使用它? 最佳答案 当然,这很简单: impor
我知道如何在常规应用程序项目中使用 Xcode 11 中的 SwiftUI,但我想知道即使我不能使用实时编辑器,是否也可以在 playgrounds 中使用它? 最佳答案 当然,这很简单: impor
新创建的 Xcode 10 playground 提供了一个播放按钮来逐步执行 playground。 如果我打开在 iPad 或以前版本的 Xcode 中创建的 Playground ,播放按钮会丢
我注意到 Xcode 10 中的 Playgrounds 不再允许使用已声明但未初始化的变量。例如: 虽然此代码可以在 Xcode 9 playground 中运行,但在 Xcode 10 playg
我已经更新到 Xcode 6,最新的出现在 AppStore 上。我正在运行 OS X Yosemite Beta 3,显然,我只能打开 iOS playground,列表中缺少 OS X。 我附上了
我在 xcode 中开发了一个 ios 应用程序,我想在 swift playground 中运行这个应用程序。所以我想将我的 .xcodeproj 项目转换为 .playground 格式。那么有什
我尝试使用以下代码行创建滤色器 let parameters = [kCIInputColorKey: CIColor(string: "0.5 0.7 0.3 1.0")] let colorFil
我尝试使用以下代码行创建滤色器 let parameters = [kCIInputColorKey: CIColor(string: "0.5 0.7 0.3 1.0")] let colorFil
每次我创建一个新的 playground 以测试一些代码时,Xcode 都会卡住并且不会运行代码。它只是在屏幕顶部显示“Running playground”或“Launching simulator
我在应用程序开发方面相对较新,但出于兴趣,我想在 Xcode 上的 Playground 项目上实现此应用程序: http://merowing.info/2015/11/the-beauty-of-
我正在尝试使用 GraphQL 记录我的 API。对于可读性问题,我想在多行中留下评论,但它似乎不适用于常规的 '\n' 换行符 """ Return:\n true : DB save succ
我是 Swift 世界的新手。 如何将带逗号的字符串转换为带小数的字符串? 代码使用点 (.) 就可以正常工作 问题是当我使用逗号 (,) ... 时:var Price 问题的根源是十进制法语键盘使
我是一名优秀的程序员,十分优秀!