livingtech
livingtech

Reputation: 3660

How do I determine what protocols a class conforms to in swift?

In objective-c, you can always check a class's protocols through its public headers. But if you have a class in swift, how do you know what protocols it conforms to? Is this even possible?

(Yes, I realize Apple's documentation lists the protocols it conforms to, but that doesn't seem like a real solution, since you might be working with a private framework or have some other theoretical reason for wanting to know an object's protocols.)

Also, yes, I know you can check for a specific protocol using the technique outlined here: https://stackoverflow.com/a/37351027/18961

Upvotes: 3

Views: 914

Answers (2)

Paul Cantrell
Paul Cantrell

Reputation: 9314

In Xcode, you can command-click on any Swift type to get a header-like view of its public interface, including protocol conformances added in both the original definition and in extensions.

This doesn’t show protocol conformances added by libraries outside the defining library, e.g. if you command-click String you won’t see your own extension String: MyFunkyProtocol. But I think it is essentially the header-file-like thing you’re looking for.

For the Swift standard lib, http://swiftdoc.org/ is a nice reference.

Upvotes: 2

Jim
Jim

Reputation: 73936

I don't believe you can do it without leaning on the Objective-C runtime. Import ObjectiveC and use the class_copyProtocolList() function.

Upvotes: 1

Related Questions