Swift Language
Krotki
Szukaj…
Wprowadzenie
Krotka to rozdzielona przecinkami lista typów zamknięta w nawiasach.
Ta lista typów może również mieć nazwę elementów i używać tych nazw w celu odniesienia się do wartości poszczególnych elementów.
Nazwa elementu składa się z identyfikatora, po którym bezpośrednio następuje dwukropek (:).
Typowe zastosowanie -
Możemy użyć typu krotki jako typu zwracanego przez funkcję, aby umożliwić funkcji zwrócenie pojedynczej krotki zawierającej wiele wartości
Uwagi
Krotki są uważane za typy wartości. Więcej informacji na temat krotek można znaleźć w dokumentacji: developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html
Co to są krotki?
Krotki grupują wiele wartości w jedną wartość złożoną. Wartości w krotce mogą być dowolnego typu i nie muszą być tego samego typu.
Krotki są tworzone przez grupowanie dowolnej liczby wartości:
let tuple = ("one", 2, "three")
// Values are read using index numbers starting at zero
print(tuple.0) // one
print(tuple.1) // 2
print(tuple.2) // three
Po zdefiniowaniu krotki można również nazwać poszczególne wartości:
let namedTuple = (first: 1, middle: "dos", last: 3)
// Values can be read with the named property
print(namedTuple.first) // 1
print(namedTuple.middle) // dos
// And still with the index number
print(namedTuple.2) // 3
Można je również nazwać, gdy są używane jako zmienne, a nawet mogą mieć w sobie opcjonalne wartości:
var numbers: (optionalFirst: Int?, middle: String, last: Int)?
//Later On
numbers = (nil, "dos", 3)
print(numbers.optionalFirst)// nil
print(numbers.middle)//"dos"
print(numbers.last)//3
Rozkład na poszczególne zmienne
Krotki można rozłożyć na poszczególne zmienne, stosując następującą składnię:
let myTuple = (name: "Some Name", age: 26)
let (first, second) = myTuple
print(first) // "Some Name"
print(second) // 26
Tej składni można użyć niezależnie od tego, czy krotka ma nienazwane właściwości:
let unnamedTuple = ("uno", "dos")
let (one, two) = unnamedTuple
print(one) // "uno"
print(two) // "dos"
Określone właściwości można zignorować za pomocą podkreślenia ( _
):
let longTuple = ("ichi", "ni", "san")
let (_, _, third) = longTuple
print(third) // "san"
Krotki jako wartość zwracana przez funkcje
Funkcje mogą zwracać krotki:
func tupleReturner() -> (Int, String) {
return (3, "Hello")
}
let myTuple = tupleReturner()
print(myTuple.0) // 3
print(myTuple.1) // "Hello"
Jeśli przypiszesz nazwy parametrów, można ich użyć na podstawie wartości zwracanej:
func tupleReturner() -> (anInteger: Int, aString: String) {
return (3, "Hello")
}
let myTuple = tupleReturner()
print(myTuple.anInteger) // 3
print(myTuple.aString) // "Hello"
Używanie typali do nazwania typu krotki
Czasami możesz chcieć użyć tego samego typu krotki w wielu miejscach w całym kodzie. Może to szybko doprowadzić do bałaganu, szczególnie jeśli twoja krotka jest złożona:
// Define a circle tuple by its center point and radius
let unitCircle: (center: (x: CGFloat, y: CGFloat), radius: CGFloat) = ((0.0, 0.0), 1.0)
func doubleRadius(ofCircle circle: (center: (x: CGFloat, y: CGFloat), radius: CGFloat)) -> (center: (x: CGFloat, y: CGFloat), radius: CGFloat) {
return (circle.center, circle.radius * 2.0)
}
Jeśli użyjesz określonego typu krotki w więcej niż jednym miejscu, możesz użyć słowa kluczowego typealias
aby nazwać swój typ krotki.
// Define a circle tuple by its center point and radius
typealias Circle = (center: (x: CGFloat, y: CGFloat), radius: CGFloat)
let unitCircle: Circle = ((0.0, 0.0), 1)
func doubleRadius(ofCircle circle: Circle) -> Circle {
// Aliased tuples also have access to value labels in the original tuple type.
return (circle.center, circle.radius * 2.0)
}
Jeśli jednak robisz to zbyt często, powinieneś rozważyć użycie struct
.
Zamiana wartości
Krotki są przydatne do zamiany wartości między 2 (lub więcej) zmiennymi bez użycia zmiennych tymczasowych.
Przykład z 2 zmiennymi
Biorąc pod uwagę 2 zmienne
var a = "Marty McFly"
var b = "Emmett Brown"
możemy łatwo zamienić wartości
(a, b) = (b, a)
Wynik:
print(a) // "Emmett Brown"
print(b) // "Marty McFly"
Przykład z 4 zmiennymi
var a = 0
var b = 1
var c = 2
var d = 3
(a, b, c, d) = (d, c, b, a)
print(a, b, c, d) // 3, 2, 1, 0
Krotki jak Case in Switch
Użyj krotek w przełączniku
let switchTuple = (firstCase: true, secondCase: false)
switch switchTuple {
case (true, false):
// do something
case (true, true):
// do something
case (false, true):
// do something
case (false, false):
// do something
}
Lub w połączeniu z Enum Na przykład z klasami wielkości:
let switchTuple = (UIUserInterfaceSizeClass.Compact, UIUserInterfaceSizeClass.Regular)
switch switchTuple {
case (.Regular, .Compact):
//statement
case (.Regular, .Regular):
//statement
case (.Compact, .Regular):
//statement
case (.Compact, .Compact):
//statement
}