top | item 40040149

(no title)

GRiMe2D | 1 year ago

Swift actually passes value types by reference on closures (anonymous functions) if they aren't explicitly listed in capture group. It's per spec. It allows you to write closures with states:

  var count = 0
  let closure = {
    count += 1
    print("Current count=", count)
  }
  
  closure() // Current count= 1
  closure() // Current count= 2
  closure() // Current count= 3
  
  let capturedVariableClosure = { [count] in 
    print("Current count=", count)
    //count += 1 // syntax error, count is const variable. Use var count in capture group
  }
  
  capturedVariableCount() // Current count= 3
  closure() // Current count= 4
  capturedVariableCount() // Current count= 3

discuss

order

jb1991|1 year ago

I think you meant to call your second closure `capturedVariableCount`