【发布时间】:2023-04-06 05:42:01
【问题描述】:
我有几个关于协议中声明的属性的问题。
返回类型差异
@protocol IHaveProperties
@required
@property (nonatomic, strong) IAmOfTypeX *propertyOfProtocolType;
@property (nonatomic, strong) NSArray *array;
@end
@interface ClassThatHasProperties : NSObject<IHaveProperties>
@property (nonatomic, strong) ImplementationOfTypeX *propertyOfProtocolType;
@property (nonatomic, strong) NSMutableArray *array;
@end
好的,所以我用协议/类组合尝试了这个,但令我懊恼的是,它编译了。
它是如何工作的?这在技术上不符合接口吗?
属性声明修饰符
@protocol IHaveProperty
@required
@property (nonatomic, strong, readonly) *example;
@end
@interface HaveProperty : NSObject<IHaveProperty>
@property (nonatomic, strong, readonly) *example;
@end
我的 Mac 正在重新启动,因此我无法尝试此操作,但我认为这没关系,因为协议声明没有任何支持。调用者不会对所有修饰符感兴趣,只会对实现协议的类感兴趣。
【问题讨论】:
-
协议应该只包含方法而不是变量。您不能访问协议中的变量
-
属性不是变量;它们是方法,不是吗?它们只是看起来/感觉像是字段,但它们实际上是 getter 和/或 setter
-
创建getter和setter方法来设置和获取存储在属性(变量)中的值
-
对,但变量/字段仅在您执行
@synthesize时才会生成,前提是您在协议中声明属性然后实现它
标签: objective-c properties objective-c-protocol