gpt4 book ai didi

objective-c - 为什么我必须投代表?

转载 作者:行者123 更新时间:2023-12-02 22:37:37 24 4
gpt4 key购买 nike

我有一个类,这个类有一个委托(delegate)协议(protocol)。我使用此类在主类中创建一个对象,并将主类指定为委托(delegate)。主类有一个我想在创建的类中读取的属性。然后我这样做:

BOOL prop = [self.delegate myProperty];

Xcode 提示“delegate 可能不会响应 myProperty

如果我向 self.delegate 发送消息以读取 myProperty,并且当您向未强制转换的对象发送消息时,通常 Xcode 从不提示,为什么我必须这样做

BOOL prop = [(myMainClass *)self.delegate myProperty];

让它发挥作用?

为了更清楚,这里是一个无需强制转换就发送到对象的消息示例:

[self.myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop){

int Number = [[obj dictionaryOfNames] count];

}];

self.myArray 是来自另一个类的对象数组,它们是字典并具有此属性 dictionaryOfNames。 Xcode 从未要求我投这个:

int Number = [[(myOtherClass *)obj dictionaryOfNames] count];

正如我在上面为 myProperty 所做的那样。

最佳答案

不同的类可以遵循一个协议(protocol)。如果你声明你遵守协议(protocol),你只是说你将实现所需的方法,但你可以在 UIView 中实现它。 , UIViewController , MyOwnClass , MyOtherClass

这就是为什么一个属性通常是这样声明的

@property (nonatomic, weak) id <MyProtocol> delegate;

所以你只是说你的委托(delegate)是一个符合协议(protocol)的对象。

关于objective-c - 为什么我必须投代表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11215057/

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