Swift: Tuple

Znany również jako Struct Lite ™ (ale nie do końca)

Typy krotek są w pewnym sensie obcą koncepcją dla programistów Objective-C i czasami mogą być mylone z structlub class. Ale w rzeczywistości są znacznie bardziej podstawowe niż oba. Lubię myśleć o nich jako o miniaturowej strukturze lub Struct Lite ™, którą należy wykorzystać w minimalnym zakresie, a następnie wyrzucić.

Zgodnie z dokumentacją Apple dotyczącą typów Swift:

Typ krotki to rozdzielona przecinkami lista zawierająca zero lub więcej typów, umieszczona w nawiasach.

Są po prostu mieszanką innych różnych typów. Krotki mogą zawierać zero lub więcej rodzajów, zasadniczo o String, Integer, Boola także inne krotki. Należy również pamiętać, że krotki są przekazywane według wartości , a nie referencji.

let foo = (0, false, “Hello”)

let foo: (Int, Bool, String) = (0, false, “Hello”)

print(foo.0) // print: “0”
print(foo.1) // print: “false”
print(foo.2) // print: “Hello”

let bar: (Int, (Bool, String)) = (1, (false, “Hello”))
print(bar.0)   // print: “0”
print(bar.1.0) // print: “false”
print(bar.1.1) // print: “Hello”

Ale zamiast używać indeksów i pamiętać, która z nich odpowiada której wartości, najlepiej jest nazywać właściwości krotki, gdy tylko jest to możliwe.

let person = (age: 28, isTall: false, name: “Andyy”)
print(person.age)    // print: “28”
print(person.isTall) // print: “false”
print(person.name)   // print: “Andyy”

Najlepszym miejscem do użycia krotki byłoby użycie funkcji, która może zwracać wiele typów. Jeśli jesteś programistą Objective-C, ta koncepcja brzmi dziwacznie, a może nawet niemożliwe. Wcześniej musieliśmy przezwyciężyć ten problem, zwracając NSArrayalbo NSDictionary. Ale nawet ta rozdzielczość może być niebezpieczna. Bo co się stanie, jeśli spróbujemy typoszeregować niewłaściwy obiekt NSArrayi wywołamy na nim określoną funkcję? Może to spowodować awarię w czasie wykonywania.

Zamiast tego przyjrzyjmy się, w jaki sposób możemy sprawić, by funkcja zwracała wiele wartości, zamiast wymyślać hakerskie rozwiązania shortstop dla ograniczeń Objective-C:

typealias Person = (age: Int, isTall: Bool, name: String)
func getMultipleValues() -> Person {
let person: Person = (age: 28, isTall: false, name: “Andyy”)
return person
}
let andyy = getMultipleValues()
print(andyy.age)    // print: "28"
print(andyy.isTall) // print: "false"
print(andyy.name)   // print: "Andyy"

Ale jak widać powyżej, istnieje wywołanie funkcji, getMultipleValues() które zwraca krotkę trzech oddzielnych i różnych typów danych, z których każdy ma własną nazwę zmiennej.

Tworzenie instancji struktury (przestarzałe)

Aktualizacja: to będzie przestarzałe
Propozycja Swift 3.0 : SE-0029
Usuń niejawne zachowanie splat krotek z aplikacji funkcji

Na początku tego posta żartobliwie nazwałem krotki Struct Lite ™ . Mało znanym faktem jest to, że krotki mogą służyć do tworzenia instancji struktur.

let size = CGSize(width: 100, height: 100)

let arguments: (width: CGFloat, height: CGFloat) = (100, 100)
var size = CGSize(arguments)

let arguments: (height: CGFloat, width: CGFloat) = (100, 100)
❗️ var size = CGSize(arguments) 

Widzisz, co tam zrobiłem? Zmieniłem układ argumentów, zamieniając lokalizacje heighti width . Mimo że są oboje CGFloat, kompilator nie może wywnioskować, co próbujesz zrobić.

Interesujący fakt

Jeśli korzystałeś wcześniej ze Swift, są szanse, że faktycznie używałeś już krotek dla typów zwracanych, po prostu nawet o tym nie wiesz. Poniżej mamy trzy oddzielne funkcje, z których wszystkie robią dokładnie to samo (nic) i żadna z nich nie zwraca żadnej wartości.

func doNothingA() -> Void { }
func doNothingB() -> () { }
func doNothingC() { }

Fajne jest to, że Voidjest to po prostu typealiasfor (), a właściwie to po prostu pusta krotka. Bo jeśli pamiętacie na początku tego wpisu, wspomniałem, że krotki mogą zawierać zero lub więcej typów.

Umysł. Nadęty. Nie ma za co.

Wybierz swoją wymowę

Istnieje duże zamieszanie, jeśli chodzi o to, jak ludzie wymawiają słowo „krotka”. Niektórzy lubią mówić „Dwa pociągnięcia”, inni „Tup-pl”, a najbardziej szaleni mówią „Choo-pl”. Bez względu na to, jakie masz preferencje, bądź przygotowany na to, by zostać wezwanym.

Przykładowy kod tego posta można znaleźć na GitHub. To tylko prosty plik Playgrounds, który pomoże Ci lepiej zrozumieć.

Jeśli podoba Ci się to, co dziś przeczytałeś, możesz sprawdzić inne moje artykuły lub chcesz się z nami skontaktować, wyślij mi tweeta lub śledź mnie na Twitterze , to naprawdę sprawia, że ​​mój dzień. Organizuję również konferencję Playgrounds w Melbourne w Australii i do zobaczenia na następnej imprezie.

Suggested posts

Wyszukiwanie informacji o nazwach domen

Fragment książki Small, Sharp Software Tools autorstwa Briana P. Hogana

Wyszukiwanie informacji o nazwach domen

Kiedy wysyłasz żądanie do facebook.com, Twój komputer wyszukuje nazwę domeny, aby przetłumaczyć tę nazwę domeny na adres IP, aby komputer mógł nawiązać to połączenie.

„Ta mała wyspa zmienia wszystko”

Jak zaprojektowaliśmy Lyft Live Activities, aby poprawić wrażenia z jazdy

„Ta mała wyspa zmienia wszystko”

Zmiana gry w przypadku wspólnych przejazdów Spośród wszystkich rzeczy, które robimy w Lyft, układanie choreografii między pasażerami a kierowcami jest jedną z najbardziej złożonych i konsekwentnych. Wykonanie tej choreografii zależy od tego, czy Lyft wykona wiele rzeczy dobrze, ale po prostu utrzymywanie prędkości jeźdźców jest niezbędne.

Related posts

Pierwsza książka dla dzieci o tym, jak się naćpać

Pierwsza książka dla dzieci o tym, jak się naćpać

(Ostrzeżenie - to jest satyra, która ma być radośnie wywrotowa - zdecydowanie nie dla dzieci) Widziałeś, jak twoja mama i tata chowają się w kuchni i palą śmierdzące papierosy. Mówią ci.

Zabójstwo Jordana Neely'ego i problem „patriotycznego” rasizmu

Czy Stany Zjednoczone mogą zrobić zasadniczy krok, by nie utożsamiać zachowania rasistowskiego z byciem dobrym Amerykaninem?

Zabójstwo Jordana Neely'ego i problem „patriotycznego” rasizmu

[Ostrzeżenie: ten esej zawiera zrzuty ekranowe ludzi wychwalających mordercę Jordana Neely'ego.] Funkcjonariusze organów ścigania w końcu - i być może niechętnie - oskarżyli Daniela Penny'ego, człowieka, który dusił Jordana Neely'ego aż do śmierci, o to zabójstwo.

Finansowanie usuwania dwutlenku węgla w RO24

Podział wniosków o środki Carbon180 na różne ścieżki

Finansowanie usuwania dwutlenku węgla w RO24

Autor: Alyson Lee, doradca zarządzający ds. spraw rządowych Coroczny proces przyznawania środków przez rząd federalny ma kluczowe znaczenie dla naszych wysiłków na rzecz sfinansowania usuwania dwutlenku węgla (CDR). Każdego roku Carbon180 przesyła prośby do różnych biur kongresowych, aby pomóc wskazać, gdzie będą płynąć dolary w przyszłym roku.

Zbieranie OSINT na potrzeby polowania na zagrożenia

Zbieranie OSINT na potrzeby polowania na zagrożenia

Hej, cyberentuzjaści! Witamy ponownie w serii OSINT poświęconej polowaniu na zagrożenia. W pierwszym artykule przedstawiłem przegląd OSINT i jego znaczenie w polowaniu na zagrożenia.