<div dir="ltr">One hopes to avoid COpaquePointer and Unsafe(Mutable)Pointer, but in practice I&#39;ve had occasion to use them a few times.<div><br></div><div>Things that are nice:</div><div><br></div><div>- Unmanaged.passUnretained/takeRetained/etc. which make memory management semantics explicit.</div><div><div><br></div><div>Things I&#39;ve been frustrated by:</div><div><br></div><div>- An API takes UnsafeMutablePointer&lt;Void&gt;, but Unmanaged.toOpaque() returns a COpaquePointer.</div><div><br></div><div>- An API gives me UnsafeMutablePointer&lt;Void&gt;, but Unmanaged.fromOpaque() takes a COpaquePointer.</div><div><br></div><div><br></div><div>In practice, I end up with monstrosities like:</div><div><br></div><div><span style="font-family:monospace,monospace">Unmanaged.passRetained(CFCopyDescription(Unmanaged&lt;AnyObject&gt;.fromOpaque(COpaquePointer($0)).takeUnretainedValue()))</span></div><div><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><br></div><div>I think a few things could help:</div><div><br></div><div>- Phase out COpaquePointer in favor of UnsafePointer&lt;Void&gt; (is this already happening?)</div><div><br></div><div>- Add implicit conversion from COpaquePointer to Unsafe(Mutable)Pointer&lt;Void&gt;, and/or vice versa.</div><div><br></div><div>- Even better, add implicit conversion from Unmanaged&lt;T&gt; to COpaquePointer or UnsafePointer&lt;Void&gt;, behaving the way toOpaque() currently does. Also, replace Unmanaged.fromOpaque() with an initializer Unmanaged(_: UnsafePointer&lt;Void&gt;).</div><div><br></div><div><br></div><div>What are others&#39; experiences? Would it be feasible/favorable to have some of these conversions?</div><div><br></div><div>Jacob Bandes-Storch<br></div></div></div></div>
</div></div></div>