2013-07-08 2 views
2

Имеет ли Objective-C оператор-подборщик, похожий на оператор «как» на C#, или рекомендуется использовать метод isKindOfClass для проверки объекта, и если да, то передайте объект в желаемый класс?
В C# я это сделать:
Objective-C эквивалент оператора 'as' в C#

Class1 o1 = obj as Class1; 
if (o1 != null) 
{ 
    // ... 
} 

В Objective-C я должен пойти с этим:

if ([obj isKindOfClass:[Class1 class]]) { 
    Class1* o1 = (Class1*)obj; 
    // ... 
} 
+3

Да, 'isKindOfClass' - правильный метод. –

ответ

1

Вы правы, isKindOfClass является правильным способом Objective-C для проверки того, является ли объект i s экземпляр данного класса или экземпляр подкласса.

Но посмотрим на ответы на

для различных аккуратных макросов, категорий и даже C++ шаблон для обеспечения синтаксис, который имитирует на C++ dynamic_cast или C# as оператор.

-1
class A { } 
class B : A { } 

A a = new A(); 
if(a.GetType() == typeof(A)) // returns true 
{ 
} 

A b = new B(); 
if(b.GetType() == typeof(A)) // returns false 
{ 
} 

или

test ts = new test(); 
      object ob = ts; 

      if (typeof(test) == ob.GetType()) 
       { 
        return true; 
       } 
+1

Это * не * эквивалентно 'is' или' as' именно из-за этого поведения; в C# 'is' или' as' будет указывать, что 'B' является' A'. – Servy

Смежные вопросы