2014-07-26 114 views
11

我想從Objective-C代碼轉換爲Swift,如下所示;如何在Swift中聲明volatile變量

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

x可從其他線程訪問。所以x被聲明爲一個volatile變量。

volatile int x; 

我該如何在Swift中編寫這段代碼?

+11

'volatile'不會讓一個變量可以從其他線程訪問。它用來表示一個變量的行爲像一個硬件寄存器。改爲使用互斥鎖。 – Potatoswatter

+1

這個問題似乎是題外話,因爲原來的前提是不正確的,因爲揮發性不像你所說的那樣做,所以我們不能轉換它 – Mark

+0

對不起,我的壞僞代碼。我知道Potatoswatter說了些什麼。 在移植我的Objective-C代碼時,需要volatile,因爲其他線程可能更新變量x並且引用需要指示最新值。 –

回答

-1

在Swift中,您可以訪問更多有效的方法來表達值的全局同步性 - 尤其是在類型級別 - 而不是volatile關鍵字。例如,您可以選擇鎖來同步讀取和寫入訪問變量。您可以選擇使用MVar來指示變量在多個線程中應只有1個可能的有效狀態。或者你可能選擇不在Swift中表達問題。由於該語言會從導入的代碼中去除易失性限定符,似乎希望利用此功能的應用程序應該堅持使用C或Objective-C,並向任何感興趣的Swift代碼提供接口。

+0

你可以請看看這個問題http://stackoverflow.com/questions/34601888/does-every-pure-function-should-have-fixed-points 並澄清你的想法?提前致謝。 – MainstreamDeveloper00