Tengo problemas para usar la estructura como una matriz en el objetivo c.

La estructura que uso es la siguiente:

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

Y lo que trato de lograr es ...

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

Como soy muy nuevo en el objetivo-c, necesitaba ayuda al respecto.

Por favor avíseme si mi código es incorrecto. Mi principal preocupación es usar esa estructura en una matriz . ¡Gracias!

-2
geeker 22 oct. 2019 a las 09:11

1 respuesta

La mejor respuesta

Estás mezclando la sintaxis de Objective-C y C. @{ key:value, ... } es un literal de diccionario de Objective-C, @[ a, ... } es un literal de matriz de Objective-C y abc-> es parte de una expresión C para acceder a un campo de un struct a través de un puntero a la estructura.

En C, la sintaxis { a, ... } tiene un doble propósito como matriz y literal de estructura determinada por el contexto. Su fragmento se puede escribir como:

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

Que declara abc como una matriz, en lugar de un puntero. El uso de un tipo de matriz con límites vacíos ([]) ajusta el tamaño de la matriz en función del inicializador y la declaración y la asignación deben realizarse juntas.

Si desea seguir con su tipo de puntero en lugar de usar un tipo de matriz, puede agregar un elenco, produciendo qué términos C son un literal compuesto , y en este caso puede separar la declaración de la asignación:

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

Nota: No puede usar el reparto (struct Abc *) aquí ... El inicializador de C y la sintaxis y semántica literal compuesta son tan extravagantes como lo es la forma C (++) ;-)

Nota: Es más habitual en Objective-C usar YES y NO en lugar de true y false, pero estos últimos se aceptan como BOOL literales.

HTH

2
CRD 22 oct. 2019 a las 09:09