<html><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head><body bgcolor="#FFFFFF" text="#000000">Thanks! That works just as
 it should. It's all compiling and unit tests are passing, so I can move
 on now.<br>
<blockquote style="border: 0px none;" 
cite="mid:CAJVYBsZc2op1W8dw5DP+P0FFopzU+U_87q5nMOM6ib6o+OuP0w@mail.gmail.com"
 type="cite">
  <div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div 
style="width:100%;border-top:2px solid #EDF1F4;padding-top:10px;">   <div
 
style="display:inline-block;white-space:nowrap;vertical-align:middle;width:49%;">
           <a moz-do-not-send="true" href="mailto:mike.ferenduros@gmail.com" 
style="color:#485664 
!important;padding-right:6px;font-weight:500;text-decoration:none 
!important;">Mike Ferenduros</a></div>   <div 
style="display:inline-block;white-space:nowrap;vertical-align:middle;width:48%;text-align:
 right;">     <font color="#909AA4"><span style="padding-left:6px">30 
September 2016 at 14:14</span></font></div>    </div></div>
  <div style="color:#909AA4;margin-left:24px;margin-right:24px;" 
__pbrmquotes="true" class="__pbConvBody"><div dir="ltr">The way to do 
this is via Unmanaged:<div><font face="monospace">    let raw = 
Unmanaged.passUnretained(expat).toOpaque()<br></font></div><div>gets you
 an UnsafeMutableRawPointer you can pass into C functions. You can turn 
this back into an ExpatSwift with<br></div><div><font face="monospace"> 
   let expat = 
Unmanaged&lt;ExpatSwift&gt;.fromOpaque(raw).takeUnretainedValue()</font></div><div><div><br></div></div><div>There
 are also retained variants that will add or remove a reference to the 
object in question.</div><div>Basically, if you know that the pointer 
won't outlive the thing it references, you want the unretained variants.
 This is usually what you want when you're wrapping C APIs with 
callbacks, especially if callbacks happen synchronously.</div><div><br></div><div>On
 the other hand, if the pointer lives independently of the Whatever then
 you may want to</div><div> - create the pointer with passRetained(), 
which will keep the object it points to alive</div><div> - access the 
object with take<b>Un</b>retainedValue() (so you don't prematurely 
release your reference to it), and</div><div>- call release() on it when
 you're done with it.</div><div>If you forget the 3rd step then you're 
leaking memory, and if you miscalculate and do it twice then you crash.</div><div><br></div><div>Or
 if you're just passing a pointer from A to B one time, you can use 
passRetained() + takeRetainedValue().</div><br>
</div></div>
</blockquote>
<br>
<div class="moz-signature">-- <br>John Brownie<br>
In Finland on furlough from SIL Papua New Guinea<br>
</div>
</body></html>