Charles Prado
06/03/2022, 2:03 PMsealed interface SomeInterface {
data class SomeInnerClass(
val internalObj: SomeInternalObj,
) : SomeInterface
data class AnotherInnerClass(
val internalObj: AnotherInternalObj
) : SomeInterface
}
🔴 SomeInterface.SomeInnerClass
is not exposed to iOS
If I try the same, but using a class, it works:
sealed class SomeClass {
data class SomeInnerClass(
val internalObj: SomeInternalObj,
) : SomeClass
data class AnotherInnerClass(
val internalObj: AnotherInternalObj
) : SomeClass
}
🟢 SomeClass.SomeInnerClass
is exposed to iOS
Is it possible to make the internal classes visible to iOS using an interface instead of a class?Anton Afanasev
06/03/2022, 2:54 PMlet clazz = SomeClass.SomeInnerClass(internalObj: "42")
let interface = SomeInterfaceSomeInnerClass(internalObj: "42")
Charles Prado
06/03/2022, 2:56 PMCharles Prado
06/03/2022, 2:56 PMAnton Afanasev
06/03/2022, 2:58 PMCharles Prado
06/03/2022, 2:59 PMAnton Afanasev
06/03/2022, 3:01 PM__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("SomeClass.AnotherInnerClass")))
@interface GCMSomeClassAnotherInnerClass : GCMSomeClass
- (instancetype)initWithInternalObj:(int32_t)internalObj __attribute__((swift_name("init(internalObj:)"))) __attribute__((objc_designated_initializer));
- (instancetype)init __attribute__((swift_name("init()"))) __attribute__((objc_designated_initializer)) __attribute__((unavailable));
+ (instancetype)new __attribute__((unavailable));
- (int32_t)component1 __attribute__((swift_name("component1()")));
- (GCMSomeClassAnotherInnerClass *)doCopyInternalObj:(int32_t)internalObj __attribute__((swift_name("doCopy(internalObj:)")));
- (BOOL)isEqual:(id _Nullable)other __attribute__((swift_name("isEqual(_:)")));
- (NSUInteger)hash __attribute__((swift_name("hash()")));
- (NSString *)description __attribute__((swift_name("description()")));
@property (readonly) int32_t internalObj __attribute__((swift_name("internalObj")));
@end;
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("SomeClass.SomeInnerClass")))
@interface GCMSomeClassSomeInnerClass : GCMSomeClass
- (instancetype)initWithInternalObj:(NSString *)internalObj __attribute__((swift_name("init(internalObj:)"))) __attribute__((objc_designated_initializer));
- (instancetype)init __attribute__((swift_name("init()"))) __attribute__((objc_designated_initializer)) __attribute__((unavailable));
+ (instancetype)new __attribute__((unavailable));
- (NSString *)component1 __attribute__((swift_name("component1()")));
- (GCMSomeClassSomeInnerClass *)doCopyInternalObj:(NSString *)internalObj __attribute__((swift_name("doCopy(internalObj:)")));
- (BOOL)isEqual:(id _Nullable)other __attribute__((swift_name("isEqual(_:)")));
- (NSUInteger)hash __attribute__((swift_name("hash()")));
- (NSString *)description __attribute__((swift_name("description()")));
@property (readonly) NSString *internalObj __attribute__((swift_name("internalObj")));
@end;
__attribute__((swift_name("SomeInterface")))
@protocol GCMSomeInterface
@required
@end;
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("SomeInterfaceAnotherInnerClass")))
@interface GCMSomeInterfaceAnotherInnerClass : GCMBase <GCMSomeInterface>
- (instancetype)initWithInternalObj:(int32_t)internalObj __attribute__((swift_name("init(internalObj:)"))) __attribute__((objc_designated_initializer));
- (int32_t)component1 __attribute__((swift_name("component1()")));
- (GCMSomeInterfaceAnotherInnerClass *)doCopyInternalObj:(int32_t)internalObj __attribute__((swift_name("doCopy(internalObj:)")));
- (BOOL)isEqual:(id _Nullable)other __attribute__((swift_name("isEqual(_:)")));
- (NSUInteger)hash __attribute__((swift_name("hash()")));
- (NSString *)description __attribute__((swift_name("description()")));
@property (readonly) int32_t internalObj __attribute__((swift_name("internalObj")));
@end;
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("SomeInterfaceSomeInnerClass")))
@interface GCMSomeInterfaceSomeInnerClass : GCMBase <GCMSomeInterface>
- (instancetype)initWithInternalObj:(NSString *)internalObj __attribute__((swift_name("init(internalObj:)"))) __attribute__((objc_designated_initializer));
- (NSString *)component1 __attribute__((swift_name("component1()")));
- (GCMSomeInterfaceSomeInnerClass *)doCopyInternalObj:(NSString *)internalObj __attribute__((swift_name("doCopy(internalObj:)")));
- (BOOL)isEqual:(id _Nullable)other __attribute__((swift_name("isEqual(_:)")));
- (NSUInteger)hash __attribute__((swift_name("hash()")));
- (NSString *)description __attribute__((swift_name("description()")));
@property (readonly) NSString *internalObj __attribute__((swift_name("internalObj")));
@end;
Anton Afanasev
06/03/2022, 3:02 PMCharles Prado
06/03/2022, 3:04 PMCharles Prado
06/03/2022, 3:26 PMCharles Prado
06/03/2022, 3:26 PMAnton Afanasev
06/03/2022, 3:27 PMinternalObj
to String/Int
Anton Afanasev
06/03/2022, 3:28 PMsealed interface SomeInterface {
data class SomeInnerClass(
val internalObj: String,
) : SomeInterface
data class AnotherInnerClass(
val internalObj: Int
) : SomeInterface
}
and
sealed class SomeClass {
data class SomeInnerClass(
val internalObj: String,
) : SomeClass()
data class AnotherInnerClass(
val internalObj: Int
) : SomeClass()
}
Anton Afanasev
06/03/2022, 3:31 PMCharles Prado
06/03/2022, 3:31 PMAnton Afanasev
06/03/2022, 3:33 PMCharles Prado
06/03/2022, 3:35 PMCharles Prado
06/03/2022, 3:36 PMCharles Prado
06/03/2022, 3:36 PMdata class ExploreTv(
val feed: Feed,
val promo: ExploreTvPromo?,
) {
companion object {
val PREVIEW = ExploreTv(
feed = Feed.PREVIEW,
promo = ExploreTvPromo.Account(
typeToPromote = <http://UserType.CLUB|UserType.CLUB>,
),
)
}
}
sealed interface ExploreTvPromo {
data class Account(
val typeToPromote: UserType,
) : ExploreTvPromo
data class Match(
val modelToPromote: ExploreMatch,
) : ExploreTvPromo
}
Charles Prado
06/03/2022, 3:36 PMCharles Prado
06/03/2022, 3:36 PMAnton Afanasev
06/03/2022, 3:36 PM