2014-12-31 14 views
6

W trybie szybkim, w pętli zarządzanej przez wartość indeksu, który iteruje, chcę utworzyć zmienną, która ma nazwę zmiennej, która jest połączeniem "person_" i bieżącego indeksu pętli.Utwórz zmienną w dynamicznej z dynamiczną nazwą

Więc moja pętla kończy się tworząc zmienne jak:

var person_0 = ... 
var person_1 = ... 
var person_2 = ... 
etc... 

nie miałem szczęścia szukają w internecie więc zamieszczam tutaj.

Dzięki!

+5

To jest zła praktyka. Są prawdopodobnie lepsze rozwiązania, aby osiągnąć to, co próbujesz zrobić. Jeśli podasz więcej kontekstu, będę mógł Ci pomóc. – David

Odpowiedz

1

nazwa let = "osoba _ \ (indeks)"

następnie dodać nazwę do zmienny tablicy zadeklarowanej przed pętli.

Coś w tym stylu?

0

To, co próbujesz zrobić, nie jest możliwe w szybkim tempie. Nazwa zmiennej jest przeznaczona tylko dla ludzi (szczególnie w języku kompilowanym), co oznacza, że ​​są rozebrani w fazie kompilacji.

ALE jeśli naprawdę chcesz to zrobić, narzędzie do generowania kodu jest drogą do zrobienia. Znajdź odpowiednie narzędzie do generowania kodu, uruchom je w fazie budowy.

3

Jednym z rozwiązań jest przechowywanie wszystkich zmiennych w tablicy. Indeksy dla zmiennych przechowywanych w tej tablicy będą odpowiadać wartościom indeksu, które próbujesz uwzględnić w nazwie zmiennej.

Utwórz zmienną instancji w górnej części kontrolera widoku:

var people = [WhateverTypePersonIs]()

Następnie należy utworzyć pętlę, która będzie przechowywać jednak wiele osób, które mają w tej zmiennej instancji:

for var i = 0; i < someVariable; i++ { 
    let person = // someValue of type WhateverTypePersonIs 
    people.append(person) 
} 

Jeśli kiedykolwiek musisz uzyskać to, co byłoby "person_2" sposobem, w jaki próbujesz rozwiązać swój problem, na przykład możesz uzyskać dostęp do tej osoby za pomocą people[2].

0

W Swift nie można tworzyć dynamicznych nazw zmiennych. To, co próbujesz osiągnąć, to typowy przypadek użycia dla Array.

Utwórz Array i wypełnij go danymi swojej osoby. Później możesz uzyskać dostęp do osób za pośrednictwem ich indeksu:

var persons: [String] = [] 

// fill the array 
for i in 0..<10 { 
    persons.append("Person \(i)") 
} 

// access person with index 3 (indexes start with 0 so this is the 4th person) 
println(persons[3]) // prints "Person 3"