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
    }


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow