Spa*_*Dog 2 casting properties objective-c compiler-warnings
我有一个类,这个类有一个委托协议.我使用这个类在主类中创建一个对象,并将主类指定为委托.主类有一个我想在创建的类中读取的属性.然后我这样做:
BOOL prop = [self.delegate myProperty];
Run Code Online (Sandbox Code Playgroud)
Xcode抱怨" delegate可能没有回应myProperty"
如果我要发送消息进行self.delegate阅读myProperty,并且通常Xcode在向未经过渲染的对象发送消息时从不抱怨,为什么我必须这样做
BOOL prop = [(myMainClass *)self.delegate myProperty];
Run Code Online (Sandbox Code Playgroud)
使它工作?
为了更清楚,这里是一个发送到对象而不必强制转换的消息的示例:
[self.myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger index, BOOL *stop){
int Number = [[obj dictionaryOfNames] count];
}];
Run Code Online (Sandbox Code Playgroud)
self.myArray是来自另一个类的对象数组,它们是字典并具有此属性dictionaryOfNames.Xcode从未要求我投这个:
int Number = [[(myOtherClass *)obj dictionaryOfNames] count];
Run Code Online (Sandbox Code Playgroud)
因为我必须在上面myProperty.
不同的类可以符合协议.如果您声明是符合协议你刚才说,你将实现该电源线的方法,但你可以在实现它UIView,UIViewController,MyOwnClass,MyOtherClass等.
这就是为什么财产通常被宣布为这样
@property (nonatomic, weak) id <MyProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)
所以你只是说你的委托是一个符合协议的对象.