我想从Objective-C代码转换为Swift,如下所示;
int sum = 0;
x = 1;
for (int i = 0; i < 100; i++) {
sum += x;
}
x可以从其他线程访问。所以x被声明为一个volatile变量。
volatile int x;
我应该如何在Swift中编写此代码?
答案 0 :(得分:0)
我将详细介绍@potatoswatter的评论。这里有一些误会
Volatile
与可访问性无关Volatile
在这里不是一个足够的构造,因为它可以确保read
与线程在访问该变量时保持一致。您的用例涉及mutations
到x
,因此需要synchronization
,这是更彻底的并发构造。这是一个比较高级的概念,不在swift
的操盘手中。 答案 1 :(得分:-1)
在Swift中,您可以访问更有效的表达值的全局同步性的方法 - 特别是在类型级别 - 而不是volatile关键字。例如,您可以选择锁来同步对变量的读写访问。您可以选择使用MVar来指示变量在多个线程中应该只有1个可能的有效状态。或者您可能选择不在Swift中表达问题。因为该语言从导入的代码中删除了volatile限定符,所以希望利用此功能的应用程序似乎应该坚持使用C或Objective-C并为任何感兴趣的Swift代码提供接口。
答案 2 :(得分:-1)
原始代码:
int sum = 0;
x = 1;
for (int i = 0; i < 100; i++) {
sum += x;
}
==================
需要替换为:
var sum = 0
public let x = 1
for i in 0..<100 {
sum += x;
}
请让我知道是否有任何混淆。
答案 3 :(得分:-2)
如果您想在任何地方使用x,则需要这样编写此变量, var x = 0
更新的代码:
让我们知道这里是否有任何困惑。