Jak zainicjować tablicę w trybie szybkim o określonej pojemności?Swift init Array o pojemności
Próbowałem:
var grid = Array <Square>()
grid.reserveCapacity(16)
ale pojawia się błąd
expected declaration
Jak zainicjować tablicę w trybie szybkim o określonej pojemności?Swift init Array o pojemności
Próbowałem:
var grid = Array <Square>()
grid.reserveCapacity(16)
ale pojawia się błąd
expected declaration
Jak o:
class Square {
}
var grid = Array<Square>(count: 16, repeatedValue: Square());
choć będzie to wywołać konstruktor dla każdego kwadratu.
Jeśli wykonane tablicę mieć opcjonalne wystąpień kwadratowe można użyć:
var grid2 = Array<Square?>(count: 16, repeatedValue: nil);
EDIT: Z Swift3 ten podpis inicjator został zmieniony na następujący:
var grid3 = Array<Square>(repeating: Square(), count: 16)
lub
var grid4 = [Square](repeating: Square(), count: 16)
Oczywiście oba działają również z Square?
i nil
.
Znalazłem, że to po prostu wywołanie 'Square()' na raz. Więc wszystkie wystąpienia w tej tablicy wskazują na to samo odniesienie. –
To nie jest poprawne. Tworzy to tablicę z 16 wartościami. OP poprosił o utworzenie nowej pustej tablicy z _capacity_ do przechowywania 16 wartości. Uważam, że nie można tego dokonać w Swift. Możesz tylko utworzyć pustą tablicę _ i_then_ zarezerwować pojemność. –
Spróbuj:
var grid = Array<Square>(count: 16, repeatedValue: aSquare)
var actions:[AnyObject?] = [AnyObject?](count: 3, repeatedValue: nil)
Swift 3
var grid : [Square]?
grid?.reserveCapacity(16)
wierzę, może być osiągnięty w jednej linii, jak również.
Miałem problemy z zaakceptowaną odpowiedzią z 'repeatating: nil', więc to była dla mnie lepsza opcja. –
Otrzymujesz ten błąd, ponieważ wywołujesz metodę poza funkcją (w klasie, strukturze, enumie lub na najwyższym poziomie). Wypróbuj to wewnątrz funkcji lub przenieś wywołanie reserveCapacity do metody init() twojej klasy. – Bill