Thanks, that does it for me, though I had to qualify the Unmanaged with a type in the first part.

Rien wrote:
For the context I passed in:

UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())

And to get the context back inside the callback:

let ourself = Unmanaged<  … your type 
here…>.fromOpaque(arg!).takeUnretainedValue()

Then “ourself” was the object normally obtained as “self”.

A more general question is how to learn these tricks. The worst pain I've had in learning Swift is how to handle interactions with frameworks in other languages, such as this one (Cocoa) or the Expat parser (C). The Swift book doesn't even mention Unmanaged or opaque. The book on using Swift with Objective-C mentions Unmanaged, but not opaque (apart from a couple of references, neither of which mentions toOpaque/fromOpaque. If there were a reference that gathered these things together in one place, it would be easier to learn than simply thrashing around for a while and asking for help.
--
John Brownie
In Finland on furlough from SIL Papua New Guinea
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to