语言指南没有透露列表理解的痕迹.在Swift中实现这一目标的最佳方法是什么?我正在寻找类似的东西:
evens = [ x for x in range(10) if x % 2 == 0]
Run Code Online (Sandbox Code Playgroud) 假设我有3张桌子.我想将3个工作表(每页一个表)中的表插入到一个excel文件中(不需要ActiveXObject)

我尝试了下面的代码,但它只创建了一个工作表
var tableToExcel = (function () {
var uri = 'data:application/vnd.ms-excel;base64,',
template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table><table>{table}</table></body></html>',
base64 = function (s) {
return window.btoa(unescape(encodeURIComponent(s)))
}, format = function (s, c) {
return s.replace(/{(\w+)}/g, function (m, p) {
return c[p];
})
}
return function (table, name) {
if (!table.nodeType) table = document.getElementById(table)
var ctx = {
worksheet: name || 'Worksheet',
table: table.innerHTML
}
window.location.href = uri + base64(format(template, ctx))
}
})();
Run Code Online (Sandbox Code Playgroud) 我想声明一个工厂来帮助我创建用于测试的单例类的实例,而无需在测试运行之间清除类级状态的开销。我的想法是使用工厂返回在函数内声明的类。
我的假设是该类将在运行中创建,并且仅在返回的引用被维护时才会保留。例如:
protocol TestClassFactory {
static func make() -> TestClass.Type
}
protocol TestClass {
static var testValue: String { get set }
}
class Factory: TestClassFactory {
static func make() -> TestClass.Type {
class Tester: TestClass {
static var testValue = "Unmodified"
}
return Tester.self
}
}
Run Code Online (Sandbox Code Playgroud)
然而,在实践中,这并没有按预期工作。具体来说,在第一个make()返回值上设置的静态值会保留到第二个返回值中。
var testClass1 = Factory.make()
print(testClass1.testValue) // "Unmodified"
testClass1.testValue = "Modified"
print(testClass1.testValue) // "Modified"
var testClass2 = Factory.make()
print(testClass2.testValue) // "Modified"
Run Code Online (Sandbox Code Playgroud)
Swift 运行时似乎保留了类,就像在编译时声明和引用的类一样。
我的问题:
I\xe2\x80\x99m 测试使用 actor 的代码,并且 I\xe2\x80\x99d 喜欢测试 I\xe2\x80\x99m 是否正确处理并发访问和重入。我常用的方法之一是用来DispatchQueue.concurrentPerform触发来自不同线程的一堆请求,并确保我的值按预期解析。但是,由于参与者使用结构化并发,因此 I\xe2\x80\x99m 不确定如何实际等待任务完成。
我\xe2\x80\x99d 喜欢做的是这样的:
\nlet iterationCount = 100\nlet allTasksComplete = expectation(description: "allTasksComplete")\nallTasksComplete.expectedFulfillmentCount = iterationCount\nDispatchQueue.concurrentPerform(iterations: iterationCount) { _ in\n Task {\n // Do some async work here, and assert\n allTasksComplete.fulfill()\n }\n}\nwait(for: [allTasksComplete], timeout: 1.0)\nRun Code Online (Sandbox Code Playgroud)\n然而,期望的超时allTasksComplete每次都会到期,无论迭代计数是 1 还是 100,也无论超时的长度如何。I\xe2\x80\x99m 假设这与混合结构化并发和 DispatchQueue 式并发是禁忌有关?
如何正确测试并发访问 \xe2\x80\x94 特别是如何保证从不同线程访问参与者,并等待测试完成直到满足所有期望?
\n