swiftobjective-cswiftuiinteropswiftui-list

Conforming to Identifiable in Objective-C


I want to make existing Objective-C classes conform to the Identifiable protocol so that I could use them as list items in SwiftUI.

@interface MyClass: NSObject // What to do?
@end

Is there a good alternative that doesn't require creating wrapper classes (like this)?

class MyClassWrapper: Identifiable {
    let id = UUID()
    var myClass: MyClass
}

Solution

  • You can use an extension to conform to Identifiable in Swift -- then just specify which property should be used as the id:

    //obj-c
    @interface MyClass : NSObject
    @property (strong,nonatomic) NSString* myIdProperty;
    @end
    
    //Swift
    extension MyClass : Identifiable {
        public var id: String {
            myIdProperty
        }
    }
    

    I used NSString/String here, but you could use NSUUID/UUID or any other Hashable-conforming id type.