这行代码有什么作用?
MyObject *objectOne = (MyObject *)recognizer.view;
我对(MyObject *)
感到困惑。
是否有效地将recognizer.view
指针投射到MyObject
?
感谢。
答案 0 :(得分:3)
是(MyObject *)
静态投射recognizer.view
,UIView
到MyObject
。这允许您在objectOne上调用MyObject特定的方法/属性。如果没有强制转换,编译器将只允许您调用UIView方法。
这可能不安全,因为您假设Recognizer.view属于MyObject类型。如果这种假设不真实,可能会发生不好的事情。有一种更安全的方法可以做到这一点。
定义一个帮助方法,为您安全地投射:
static inline id MySafeCast(Class klass, id obj) {
return [obj isKindOfClass:klass] ? obj : nil;
}
如果你对类型的假设是错误的,那么该方法将返回nil。
// objectOne will be nil if recognizer.view is not a MyObject
MyObject *objectOne = MySafeCast([MyObject class], recognizer.view);
答案 1 :(得分:2)
此行代码将recognizer.view
强制转换为MyObject
类型。这样,您就可以使用点MyObject
语法访问.
的属性。
由于Objective C是一种动态类型语言,因此类型转换不如强类型语言重要。即使不将变量强制转换为MyObject*
类型,也可以使用方括号语法调用方法和访问属性。但是,使用点语法访问属性需要正确的类型。
答案 2 :(得分:1)
是的,它将Recognizer.view转换为MyObject类。