Thank you for the clarification. > On 8. Aug 2017, at 18:39, Guillaume Lessard <gless...@tffenterprises.com> > wrote: > > >> On Aug 8, 2017, at 09:10, Martin R <martinr...@gmail.com> wrote: >> >> In that example the tuple is a (stored) property of a class, not a global >> variable. And why does it crash for a global variable, but not for a local >> variable in a function? > > In the case of a local variable in a function, the compiler can statically > prove that there is no simultaneous access, and using `swap` is allowed. With > a global variable, the compiler can’t statically prove exclusive access. > (it seems silly with your simple example, but the system doesn’t try static > enforcement with global variables.) > > Here’s another modification which traps at runtime: > > *** > import Dispatch > > func foo() { > var tuple = (1, 2) > > let q = DispatchQueue(label: "queue") > q.async { swap(&tuple.0, &tuple.1) } > q.sync {} > > print(tuple) > } > > foo() > *** > > Guillaume Lessard >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users