1

在 Objective-C 中,是否可以限制id为几种类型?我想写一个有id参数的方法,但是这个方法只适用于某些 ObjC 类型:使用id可能会导致运行时错误。是否有任何 LLVM 约定或类似的东西?

4

3 回答 3

1

只要你在处理对象,你就可以要求它的类:

id anId;

if ([anId isKindOfClass:[NSNumber class]]) {
    ...
}
于 2012-10-30T11:01:06.953 回答
1

id是一个通用的Objective-C 对象指针,即它表示任何对象

您可以限制类型的唯一方法是使用协议:

id <myProtocol>

因此,通过这种方式,您指向任何采用该myProtocol协议的对象。

于 2012-10-30T10:59:56.093 回答
1

“限制”id不是 Objective-C 的东西。无论如何,如果你传递一个类型与方法声明中指定的类型不匹配的对象,你只会得到一个警告而不是编译器错误(除非你编译 using -Werror),所以编译器不能真正阻止你从这样做。

是的,这很容易出现运行时错误,但这就是 Objective-C 的工作方式。您应该做的一件事是记录接受哪些类型。

可以做的一件事是在运行时检查类型,可以使用 的isKindOfClass:isMemeberOfClass:方法NSObject。此外,如果对象应该响应一组公共消息,您可以将它们包装到协议中并要求类型的表达式id <MyProtocol>

于 2012-10-30T11:03:35.310 回答