что эквивалентно объекту в C # для цели C? - PullRequest
0 голосов
/ 28 мая 2010

В c # я могу объявить object o;, тогда я могу присвоить o=(float)5.0; или o="a string." Есть ли эквивалент для Objective-C? Я пытался использовать id, но он не принимает примитивный тип, как float или integer. Спасибо за помощь.

Ответы [ 5 ]

11 голосов
/ 28 мая 2010

Objective-C не имеет "унифицированной системы типов" в словах CLR. Другими словами, как надмножество C, примитивные типы Objective-C отличаются звери в целом от экземпляров объекта. Тип id может хранить ссылки (на самом деле указатели во время выполнения OS X / iPhone Objective-C) на любой экземпляр объекта. Примитивные типы C (например, int, float и т. Д.) Должны быть заключены в NSValue или NSNumber, чтобы их можно было присвоить типу id. Конечно, это именно то, что делает компилятор C #. Просто в C # вам не нужно явно выполнять (не) преобразование в бокс.

Довольно скоро, код как

float val;
id obj = [NSNumber numberWithFloat:val];
...
float v = [obj floatValue];

станет второй натурой, если, к сожалению, многословно по современным стандартам.

3 голосов
/ 28 мая 2010

Вы правы, id работает только для ссылок на объекты ObjC. Если вы хотите сослаться на int со ссылкой на id, вам нужно поместить его в NSNumber. Кстати, C # также упаковывает эти примитивы, просто делает это автоматически.

3 голосов
/ 28 мая 2010

На самом деле такого нет. Вы можете использовать NSNumber или NSValue для обработки собственных типов данных как объектов. NSString будет делать строки. Вы можете назначить все это типизированной переменной id, но вам нужно будет создать их с помощью правильных методов класса init.

2 голосов
/ 28 мая 2010

В свое время мы должны были идти 15 миль по снегу в гору, чтобы использовать пустые указатели . О, и у нас не было StackOverflow!

1 голос
/ 07 февраля 2016

На самом деле, типы данных C # - это просто псевдонимы для соответствующих классов, и поэтому они могут быть назначены типу объекта. Например, int на самом деле является классом с именем Int32.

Как упоминал ранее @Barry, с Objective-C дело обстоит иначе.

...