MyObject * objectOne =(MyObject *)recognizer.view;

时间:2013-06-04 18:04:12

标签: ios objective-c

这行代码有什么作用?

MyObject *objectOne = (MyObject *)recognizer.view;

我对(MyObject *)感到困惑。

是否有效地将recognizer.view指针投射到MyObject

感谢。

3 个答案:

答案 0 :(得分:3)

(MyObject *)静态投射recognizer.viewUIViewMyObject。这允许您在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类。