gpt4 book ai didi

ios - 为什么协议(protocol)对父类(super class)隐藏方法和属性?

转载 作者:行者123 更新时间:2023-11-28 18:18:06 25 4
gpt4 key购买 nike

考虑这个类:CAEmitterLayer。此类响应属性 name

现在我已经创建了一个名为 MyEmitterCAEmitterLayer 并且此类符合我创建的名为 MyProtocol 的协议(protocol)。

MyEmitter 类声明是这样的:

标题

#import "MyProtocol.h"

@interface MyEmitter : CAEmitterLayer <MyProtocol>

@end

实现

#import "MyEmitter.h"

@implementation MyEmitter

@synthesize internalString = _internalString;

@end

协议(protocol)就是这样的:

@protocol MyProtocol <NSObject>

@property (nonatomic, strong) NSString * internalString;

@end

这就是问题所在。如果我像这样创建一个新对象

MyEmitter *obj = [[MyEmitter alloc] init];

并尝试使用 name 属性,xcode 提示 no known instance method for selector 'name'

事实上,我无法访问类 CAEmitterLayer 的任何属性,即使 MyEmitter 是该类的子类。

我正在尝试这样使用它:

  for (id <MyProtocol> node in nodes) {
[node setName:@"ddd"]; // error here
}

显然协议(protocol)对父类(super class)隐藏了一切。为什么会这样,我该如何解决?

注意:我必须将该综合行添加到类中,否则 xcode 不会停止提示。

最佳答案

node的静态类型是id <MyProtocol> .编译器正确地说这种类型没有声明 setName:方法。

只需切换到MyEmitter *它应该有效。

关于ios - 为什么协议(protocol)对父类(super class)隐藏方法和属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29065324/

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