简体   繁体   中英

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

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, eg 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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM