2013-02-05 13 views
23

Powiel możliwe:
Is there some literal dictionary or array syntax in Objective-C?NSArray objectAtIndex: skrótowym

Niedawno zauważyłem, że coś jest dziwne wydaje się działać w Objective-C.

Kiedy mam tablicę,

NSArray *myArray = @[@"1", @"b", @"3", @"d"]; 

mogę normalnie przejść przez drugi element,

NSString *element = [myArray objectAtIndex:1]; // second element 

jednak wydaje mi się teraz również w stanie uzyskać do niego dostęp za pośrednictwem.

Czy ktoś wie, czy jest to obecnie zdefiniowane zachowanie, a zatem bezpieczne w użyciu, czy też powinienem tego unikać? Dziękuję każdemu kto może pomóc!!

+0

Niestety, nie bardzo wiedziałem, jak go szukać. –

+0

Dziękuję wszystkim za odpowiedzi !! :) –

Odpowiedz

28

Ta składnia została dodana w Clang 3.3: Objective C Literals. Zasadniczo kompilator konwertuje wyrażenia typu objCObj[idx] na wyrażenie [objCObj objectAtIndexedSubscript:idx]. Działa również dla słowników i możesz go adoptować do własnych obiektów.

Jako takie, jesteś całkowicie bezpieczny, używając go, zakładając, że będziesz używać nowoczesnej wersji Objective C i odpowiednio zaktualizowanego kompilatora Objective C (tj. Clang).

+0

Apple zrobił bałagan ze stenografii .. Co się stało z * "jeśli nie jest zepsuty, nie napraw" "? – Jacksonkr

4

jest to nowa funkcja Objective-C i dostarczony od Xcode 4.5

jej bezpiecznie używać tej składni, można nawet dać własne zajęcia wsparcia dla tego produktu.

2

Ya, można bezpiecznie używać tych składni.

Ta składnia jest częścią Modern Objective-C.

Można sprawdzić ten artykuł po więcej informacji: ObjectiveCLiterals

2

Jest to całkowicie poprawny kod do najnowszej wersji kompilatora LLVM. Do tej pory jest on nieprawidłowy dla innych kompilatorów (np. GCC).

Niezależnie od tego, czy należy tego unikać, czy nie - cóż, to kwestia gustu. W Internecie prowadzi się kilka poważnych dyskusji, ponieważ indeksowanie zachowuje się nieco inaczej (do jego realizacji stosowana jest cała inna metoda). Istnieją również dyskusje, czy używać literówek do wyrażania, czy nie, ponieważ istnieją oznaki, gdy powodują, że kod jest mniej czytelny (np. Są one pisane jak literały, ale w rzeczywistości są autorejestrowanymi obiektami). Zauważ, że wszystko odbywa się za pomocą literałów można zrobić za pomocą prostych makr.