[swift-users] Referencing Swift Functions from the Objective-C Runtime

Jeff Kelley slaunchaman at gmail.com
Sat Nov 19 00:37:39 CST 2016


Hello,

	I’m trying to enumerate the methods of a class in Swift using the Objective-C runtime. Everything is working fine so far, except for the very last step. Suppose I have a Swift class like this:

class Foo: SomeSuperclass {
    
    @objc func bar() {
        print("Hello, World!")
    }
    
}

	Using the Objective-C runtime methods, I can get the method with class_copyMethodList and then get to the method’s implementation using method_getImplementation. However, what I need to do next is to stick this into a tuple that looks like this:

typealias FooEntry = (fooClass: SomeSuperclass.Type, methods: [(String, (Foo) throws -> Void)])

	For now, the workaround is to make a static variable that returns all of the entries:

    static var allEntries = {
        return [
            ("bar", bar),
        ]
    }

	Is there any way to go from the raw IMP that I get back from the runtime to the Swift type so I can construct this list dynamically?


Jeff Kelley

SlaunchaMan at gmail.com | @SlaunchaMan <https://twitter.com/SlaunchaMan> | jeffkelley.org <http://jeffkelley.org/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161119/05ea9fe8/attachment.html>


More information about the swift-users mailing list