Suche…


Einführung

Ein Tupeltyp ist eine durch Kommas getrennte Liste von Typen, die in Klammern eingeschlossen sind.

Diese Liste von Typen kann auch den Namen der Elemente haben und diese Namen verwenden, um auf die Werte der einzelnen Elemente zu verweisen.

Ein Elementname besteht aus einem Bezeichner, dem unmittelbar ein Doppelpunkt (:) folgt.

Allgemeiner Gebrauch -

Wir können einen Tupeltyp als Rückgabetyp einer Funktion verwenden, damit die Funktion ein einzelnes Tupel mit mehreren Werten zurückgeben kann

Bemerkungen

Tupel werden als Werttyp betrachtet. Weitere Informationen zu Tupeln finden Sie in der Dokumentation: developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html

Was sind Tupel?

Tupel gruppieren mehrere Werte in einen einzigen zusammengesetzten Wert. Die Werte innerhalb eines Tupels können von einem beliebigen Typ sein und müssen nicht vom selben Typ sein.

Tupel werden durch Gruppieren einer beliebigen Anzahl von Werten erstellt:

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

Bei der Definition des Tupels können auch einzelne Werte benannt werden:

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

Sie können auch benannt werden, wenn sie als Variable verwendet werden. Sie können sogar optionale Werte enthalten:

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

In einzelne Variablen zerlegen

Tupel können mit folgender Syntax in einzelne Variablen zerlegt werden:

let myTuple = (name: "Some Name", age: 26)
let (first, second) = myTuple

print(first) // "Some Name"
print(second)  // 26

Diese Syntax kann unabhängig davon verwendet werden, ob das Tupel über unbenannte Eigenschaften verfügt:

let unnamedTuple = ("uno", "dos")
let (one, two) = unnamedTuple
print(one) // "uno"
print(two) // "dos"

Bestimmte Eigenschaften können mit Unterstrich ( _ ) ignoriert werden:

let longTuple = ("ichi", "ni", "san")
let (_, _, third) = longTuple
print(third) // "san"

Tupel als Rückgabewert von Funktionen

Funktionen können Tupel zurückgeben:

func tupleReturner() -> (Int, String) {
    return (3, "Hello")
}

let myTuple = tupleReturner()
print(myTuple.0) // 3
print(myTuple.1) // "Hello"

Wenn Sie Parameternamen vergeben, können diese vom Rückgabewert verwendet werden:

func tupleReturner() -> (anInteger: Int, aString: String) {
    return (3, "Hello")
}

let myTuple = tupleReturner()
print(myTuple.anInteger) // 3
print(myTuple.aString) // "Hello"

Verwenden Sie einen Typealias, um Ihren Tupeltyp zu benennen

Gelegentlich möchten Sie möglicherweise denselben Tupeltyp an mehreren Stellen in Ihrem Code verwenden. Dies kann schnell unübersichtlich werden, insbesondere wenn Ihr Tupel komplex ist:

// 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)
}

Wenn Sie einen bestimmten Tupel-Typ an mehreren typealias , können Sie das Schlüsselwort typealias , um Ihren Tupel-Typ zu benennen.

// 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)
}

Wenn Sie dies jedoch zu oft tun, sollten Sie stattdessen eine struct verwenden.

Werte austauschen

Tupel sind nützlich, um Werte zwischen 2 (oder mehr) Variablen auszutauschen, ohne temporäre Variablen zu verwenden.

Beispiel mit 2 Variablen

Gegeben 2 Variablen

var a = "Marty McFly"
var b = "Emmett Brown"

wir können die Werte leicht austauschen

(a, b) = (b, a)

Ergebnis:

print(a) // "Emmett Brown" 
print(b) // "Marty McFly"

Beispiel mit 4 Variablen

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

Tuples als Case in Switch

Verwenden Sie Tupel in einem Switch

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
}

Oder in Kombination mit einer Aufzählung. Zum Beispiel mit Größenklassen:

    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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow