![]() |
1
4
较新的编译器注意到,对于同一类的同一实例变量,有两个不同的访问器定义。当然,链接器应该抱怨。 旧的编译器应该把它赶回去。@property声明是一个隐式方法声明,无论它发生在类还是协议中。当一个类和一个协议都定义了一个同名的属性时,一个类将得到两组方法声明。很明显,这会在这条线路的某个地方引起问题。
这两个编译器之间的差异可能是微不足道的,比如
定义“确定”。编译器会接受吗?可能。毕竟,在协议的readonly属性中定义了getter方法,但在类中还定义了setter方法。由于协议不限制实现类可以有哪些附加方法,因此可以添加setter方法,就像添加任何其他不相关的方法一样。
如果该属性是协议所必需的,则通过采用协议来显式声明该属性。
最简单的解决方案是(1)不要定义与类属性重叠的协议。不管怎样,这样做违背了制定协议的全部目的(2) 使协议属性为readwrite,这样编译器和运行时就不会混淆。
难怪编译器会抱怨。如果它是一只狗,它会在混乱中弄湿自己。 我认为你需要认真地重新考虑你的设计。你能从这样一个非标准的,冒险的设计中得到什么好处?获取编译器错误是最好的情况。最坏的情况是 运行时 对不可预知的结果感到困惑。 简而言之,(向莎士比亚道歉)“……错不在编者,而在我们自己。” |
![]() |
2
0
你试过重新定义
|
![]() |
3
0
看起来不正确。核心数据文档说您应该使用非原子(因为这里不能使用线程),并且您还应该保留id,因为它是一个对象,而不是赋值(默认)。 如果子类需要访问超类的ivar,它需要声明它的属性,并使用@dynamic命令编译器保持安静。看起来你没有那样做。 它也可能与我发现的不同编译器的错误有关: http://openradar.appspot.com/8027473 也有可能id在核心数据中有特殊的含义,您应该使用不同的名称。 |
![]() |
Noah H · 如何通过终端或Swift禁用三指轻拍手势? 7 年前 |
![]() |
Dmitry Serov · 货币数字格式-数字为整数时省略分数部分 7 年前 |
![]() |
Duny · ObjC日期始终返回2017年12月25日 7 年前 |
![]() |
Jan Kaiser · NSButton不调用其操作 7 年前 |