如何在Swift中声明volatile变量

时间:2014-07-26 13:26:56

标签: swift

我想从Objective-C代码转换为Swift,如下所示;

int sum = 0;
x = 1;
for (int i = 0; i < 100; i++) {
    sum += x;
}

x可以从其他线程访问。所以x被声明为一个volatile变量。

volatile int x;

我应该如何在Swift中编写此代码?

4 个答案:

答案 0 :(得分:0)

我将详细介绍@potatoswatter的评论。这里有一些误会

  • Volatile与可访问性无关
  • Volatile在这里不是一个足够的构造,因为它可以确保read与线程在访问该变量时保持一致。您的用例涉及mutationsx,因此需要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

  • 原始代码:

int sum = 0; x = 1;对于(int i = 0; i <100; i ++){sum + = x; }

更新的代码:

var sum = 0 x = 1 for(i in 0 .. <100){sum = sum + x}

  • 总和= 0 您也可以将其定义为类中或外部的任何位置。
  • 让总和= 0 您将无法编辑该值。

让我们知道这里是否有任何困惑。