gpt4 book ai didi

iOS 类别符合具有属性 : how to implement 的协议(protocol)

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:20 24 4
gpt4 key购买 nike

我在我创建的类上有一个类别,该类别符合一个协议(protocol),该协议(protocol)在其实现中需要一个属性。但是,因为我在一个类别中,所以我无法在类别的实现中综合该属性。因此,我对如何实现 setter 方法感到困惑(当我将协议(protocol)的属性保持为只读时,它工作正常,因为我只需要一个访问器方法)。

这是我的协议(protocol):

@protocol SomeProtocol <NSObject>
@property (nonatomic) BOOL didDisplayRecommendation;
@end

我知道如果我这样做我会得到一个无限循环:

- (void)setDidDisplayRecommendation:(BOOL)didDisplayRecommendation
{
self.didDisplayRecommendation = didDisplayRecommendation;
}

但是当我尝试这个时我得到一个编译器错误:

- (void)setDidDisplayRecommendation:(BOOL)didDisplayRecommendation
{
_didDisplayRecommendation = didDisplayRecommendation;
}

请注意,didDisplayRecommendation 是协议(protocol)中的属性。解决这个问题的最佳方法是什么?提前致谢!

最佳答案

不允许通过类别将实例变量添加到类中,请参阅 https://stackoverflow.com/a/13000930/171933

因为您需要一个变量来保存 didDisplayRecommendation 的值,所以您不能对类别执行此操作(除非您想弄脏 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/doc/uid/TP40001418-CH3g-SW5)。

我建议您重新考虑您的架构,看看您是否真的需要使用类别。子类甚至 Mixins可能是更好的方法。

关于iOS 类别符合具有属性 : how to implement 的协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com