Hacker News new | ask | show | jobs
by GRiMe2D 793 days 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
1 comments

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