Search code examples
objective-cswiftswift4protocolsios11

iOS11 Swift 4 - how to check if Swift class conforms to protocol defined in Objective-C?


I have a legacy code base with code written in Objective-C. I'm adding a new class written in Swift which has to conform to existing protocols defined in Objective-C.

How can I make sure my Swift class correctly implements methods defined in Objective-C protocol?

//In Obj-C
    @protocol OBJCLocationObserver <NSObject>
    - (void)didUpdateLocationWithModel:(nullable Model *)locationModel
                       lastLocation:(CLLocationCoordinate2D)lastLocation;
    @end


//In Swift

    extension SwiftLocationManager : OBJCLocationObserver
    {
        public func didUpdateLocation(with model: Model?, lastLocation: CLLocationCoordinate2D) {
    // How to verify this function signature is actually conforming to the Obj-C protocol and is not a new method?
    }
    }

Solution

  • [MyClass conformsToProtocol:@protocol(MyProtocol)];
    

    According to Apple Docs you can use conformsToProtocol:which returns a Boolean value that indicates whether the receiver conforms to a given protocol.


    Example

    @protocol MyProtocol
    - (void)helloWorld;
    @end
    
    @interface MyClass : NSObject <MyProtocol>
    @end
    

    Will be exposed as:

    console.log(MyClass.conformsToProtocol(MyProtocol)); 
    
    var instance = MyClass.alloc().init();
    console.log(instance.conformsToProtocol(MyProtocol))