Массив структуры в цели c - PullRequest
       7

Массив структуры в цели c

0 голосов
/ 22 октября 2019

У меня проблемы с использованием struct как массива в цели c.

Структура, которую я использую, выглядит следующим образом -

struct Abc{
__unsafe_unretained NSString *textValue;
BOOL value;
};

И я пытаюсь достичь -

 struct Abc *abc;
abc = @{@{abc->textValue:@"hello",abc->value:false},
        @{abc->textValue:@"thank you ",abc->value:true},
        @{abc->textValue:@"welcome",abc->value:true}
      };

Поскольку я очень плохо знаком с целью-c, мне нужна была некоторая помощь по этому вопросу.

Пожалуйста, дайте мне знать, если мой код неверен. Моя главная задача - использовать эту структуру в массиве . Спасибо!

1 Ответ

2 голосов
/ 22 октября 2019

Вы смешиваете синтаксис Objective-C и C. @{ key:value, ... } является литералом словаря Objective-C, @[ a, ... } является литералом массива Objective-C, а abc-> является частью выражения C для доступа к полю struct через указатель на структуру.

В C синтаксис { a, ... } служит двойному назначению как массив, так и литерал структуры, определяемый контекстом. Ваш фрагмент может быть записан как:

struct Abc abc[] = { {@"hello", false},
                     {@"thank you", true},
                     {@"welcome", true}
                   };

, который объявляет abc как массив, а не как указатель. При использовании типа массива с пустыми границами ([]) размер массива на основе инициализатора и объявления и присваивания должен выполняться вместе.

Если вы хотите придерживаться типа указателя, а не использовать тип массиваВы можете при условии добавить приведение, производящее то, что С называет составным литералом , и в этом случае вы можете отделить объявление от присваивания:

struct Abc *abc;
abc = (struct Abc []){ {@"hello", false},
                       {@"thank you", true},
                       {@"welcome", true}
                     };

Примечание: вы не можете использоватьприведение (struct Abc *) здесь ... C инициализатор C и составной литеральный синтаксис и семантика такие же причудливые, как и способ C (++); -)

Примечание: в Objective-C более обычно использоватьYES & NO вместо true и false, но последние принимаются как BOOL литералы.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...