如何在Objective-C中创建泛型属性?(附Swift实现示例)
在Objective-C中创建带约束的泛型属性
好问题!Objective-C的泛型语法和Swift确实有差异,咱们直接来看怎么实现你要的类似效果。
首先,对应Swift里<T: MyOtherType where T: MyProtocol>这种同时限定父类和协议的泛型约束,Objective-C里是把这些约束直接写在泛型参数的声明里。
基础写法示例
假设你已经有了MyOtherType类和MyProtocol协议,对应的泛型类和属性可以这么写:
@interface MyClass<T: MyOtherType<MyProtocol>> : NSObject @property (nonatomic, strong) T property; @end @implementation MyClass @end
详细拆解
- 泛型参数声明:
T: MyOtherType<MyProtocol>表示T必须是MyOtherType的子类,同时还要遵守MyProtocol协议 - 如果需要同时遵守多个协议,直接在
<>里用逗号分隔就行,比如T: MyOtherType<MyProtocol, AnotherProtocol> - 和Swift不同的是,Objective-C的泛型更多是编译时类型检查,运行时这个属性的实际类型还是
id,但编译阶段会帮你做类型校验,避免错误赋值
完整的可运行示例
为了更清晰,咱们把协议和父类的定义也补上:
// 先定义自定义协议 @protocol MyProtocol <NSObject> - (void)executeTask; @end // 定义父类 @interface MyOtherType : NSObject @end @implementation MyOtherType @end // 泛型类实现 @interface MyClass<T: MyOtherType<MyProtocol>> : NSObject @property (nonatomic, strong) T property; @end @implementation MyClass @end
这样你就能在Objective-C里创建出和Swift示例功能一致的泛型属性啦。
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

