You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:08:37