(Objective-) C не поддерживает присвоение одного массива другому, есть обходные пути, включающие struct
, так как они назначаемы, но вам не нужно идти туда.
Если вам нужен постоянный массив, который будет использоваться экземплярами, вы можете просто объявить его как static
:
static const float stops[2][2] = { {27.3, 51.7}, {93.2, 42.24}};
static
делает stops
доступным только для кода в том же файле. Вы можете поместить объявление между @implementation
и @end
, чтобы хотя бы визуально связать его с принадлежностью к классу.
Выше не подходит, если вам нужен массив переменных, но он является частью решения. Сохраните переменную вашего экземпляра:
@private
float stops[2][2];
должен быть массивом, а не каким-либо указателем, так как он должен распределять пространство для ваших float. Затем используйте вышеуказанное объявление, но дайте ему другое имя:
static const float _stops_init[2][2] = { {27.3, 51.7}, {93.2, 42.24}};
и затем в вашем init
используйте стандартную функцию C memcpy()
, чтобы скопировать значения в памяти, занятой _stops_init
, в память, занятую stops
:
memcpy(stops, _stops_init, sizeof(_stops_init));
Здесь sizeof()
вернет общий размер в байтах памяти, используемой вашим массивом с плавающей запятой _stops_init
, а memcpy()
копирует эти байты по сравнению с байтами, связанными с stops
- то есть реализует присвоение массива, которое C не делает т напрямую поддерживаю.
Используя массив static const
вместо локальной переменной, определите в init()
, поскольку источник ваших значений сохраняет воссоздание источника при каждом вызове init()
.
Приведенный выше код не выполняет всех проверок, которые он должен выполнять - рекомендуется, как минимум, assert()
проверка того, что размеры stops
и _stops_init
одинаковы.
НТН