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

Jacob Bandes-Storch jtbandes at gmail.com
Sat Nov 19 00:58:27 CST 2016


I imagine unsafeBitCast would be the way to go here. But are you assuming
that all of the instance methods have type "(Foo) throws -> Void" ? Or do
you somehow want to dynamically use the type information?

Jacob

On Fri, Nov 18, 2016 at 10:37 PM, Jeff Kelley via swift-users <
swift-users at swift.org> wrote:

> 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
>
>
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161118/707f4b1c/attachment.html>


More information about the swift-users mailing list