How to declare volatile variables in Swift

后端 未结 4 2006
醉梦人生
醉梦人生 2021-02-19 07:57

I want to convert to Swift from Objective-C code like following;

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

x is ac

相关标签:
4条回答
  • 2021-02-19 08:00

    Original Code:

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

    ==================

    Need to replace with :

    var sum = 0
    public let x = 1
    for i in 0..<100 {
        sum += x;        
    }
    

    Please let me know if any confusion is there in this.

    0 讨论(0)
  • 2021-02-19 08:10

    There is currently no equivalent to volatile in Swift.

    In Swift you have access to more potent means of expressing global synchronicity of values than the volatile keyword - which does not provide any kind of atomicity guarantees, and must be used with locks to establish critical sections. For example, you might choose locks to synchronize read and write access to a variable. You might choose to use an MVar to indicate that a variable should only have 1 possible valid state across multiple threads.

    Or you might choose to simply not express the problem in Swift. If you're looking for the exact behavior of a volatile variable (which, in your situation, sounds unlikely), stick with C and C++.

    0 讨论(0)
  • 2021-02-19 08:12

    I will expand on @potatoswatter's (excellent) comments . There are a couple of misunderstandings here

    • Volatile has nothing to do with accessibility
    • Volatile is not a sufficient construct here since it is ensures read consistency to threads when they access that variable. Your use case is involving mutations to x and thus requires synchronization that is a more thorough concurrency construct. This is a moderately advanced concept and is not in the wheelhouse of swift.
    0 讨论(0)
  • 2021-02-19 08:22

    If you want to use x from anywhere, then you need to write this variable like this, var x = 0

    • Original code :

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

    Updated code :

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

    • var sum = 0 you can define this variable to anywhere in the class or outside too.
    • let sum = 0 you will not able to edit that value.

    Let us know if any confusion here.

    0 讨论(0)
提交回复
热议问题