When you can (legally) observe it, tuples in Swift have guaranteed standard C-style layout.
John McCall confirms this here: https://lists.swift.org/pipermail/swift-dev/Week-of-Mon-20170424/004481.html > On 20 Jul 2017, at 4:33 am, Taylor Swift via swift-users > <swift-users@swift.org> wrote: > > Many APIs like OpenGL take arrays where the atomic unit is multiple elements > long. For example, a buffer of coordinates laid out like > > :[Float] = [ x1, y1, z1, x2, y2, z2, ... , xn, yn, zn ] > > I want to be able to define in Swift (i.e., without creating and importing a > Objective C module) a struct that preserves the layout, so that I can do > withMemoryRebound(to:capacity:_) or something similar and treat the buffer as > > struct Point > { > let x:Float, > y:Float, > z:Float > } > > :[Point] = [ point1, point2, ... , pointn ] > > The memory layout of the struct isn’t guaranteed, but will the layout be > guaranteed to be in declaration order if I use a tuple inside the struct > instead? > > struct Point > { > let _point:(x:Float, y:Float, z:Float) > > var x:Float > { > return self._point.x > } > > var y:Float > { > return self._point.y > } > > var z:Float > { > return self._point.z > } > } > > This is an ugly workaround, but I can’t really think of any alternatives that > don’t involve “import something from Objective C”. I am aware that the > implementation of structs currently lays them out in declaration order, but > I’m looking for something that’s actually defined in the language. > > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users