A tuple-ök több értéket egyetlen összetett értékké csoportosítanak. A tömbökkel ellentétben a tuple-ben lévő értékeknek nem kell azonos típusúnak lenniük, és a tuple mérete a létrehozás után rögzített.
Egy tuple létrehozásához az értékeket zárójelbe teszed, vesszővel elválasztva:
let order = ("biscuits", 2.99, 3)
A típusannotációkat explicit módon is megadhatod:
let order: (String, Double, Int) = ("biscuits", 2.99, 3)
Ha egy névtelen tuple-ből ki szeretnéd nyerni az egyes elemeket, használd a nullától induló indexszintaxist (.0, .1 stb.):
let item = order.0 // "biscuits"
let quantity = order.2 // 3
A tuple definiálásakor nevet adhatsz az egyes elemeknek:
let order = (item: "biscuits", price: 2.99, quantity: 3)
Az elemek elnevezése olvashatóbbá teszi a kódot, és lehetővé teszi, hogy az elemeket a címkéik segítségével, pont jelöléssel érd el:
let item = order.item // "biscuits"
let quantity = order.quantity // 3
Az elemneveket a típusannotációban is megadhatod:
let order: (item: String, price: Double, quantity: Int) = (item: "biscuits", price: 2.99, quantity: 3)
Ha egy tuple-t változóként (var) deklarálsz, frissítheted az elemeit:
var order = ("biscuits", 2.99, 3)
order.0 = "cookies"
order.1 = 1.99
order.2 = 5
print(order)
// Prints ("cookies", 1.99, 5)
Bár a Swift függvényei csak egyetlen értéket adhatnak vissza, egy tuple visszaadásával több értéket is becsomagolhatsz, és több értéket adhatsz vissza egy függvényből:
func divide(_ dividend: Int, by divisor: Int) -> (quotient: Int, remainder: Int) {
let quotient = dividend / divisor
let remainder = dividend % divisor
return (quotient, remainder)
}
let result = divide(14, by: 4)
print("Quotient: \(result.quotient), Remainder: \(result.remainder)")
// Prints "Quotient: 3, Remainder: 2"
A tuple értékeit felbonthatod (kicsomagolhatod) külön konstansokra vagy változókra:
let order = ("biscuits", 2.99, 3)
let (item, price, quantity) = order
print(item) // Prints "biscuits"
A tuple-ök felbontása közvetlenül for-in ciklusokban is működik:
let orders = [("biscuits", 2.99, 3), ("cookies", 1.99, 5)]
for (item, price, quantity) in orders {
print("Item: \(item), Price: \(price), Quantity: \(quantity)")
}
Egy manó vagy, aki a Mikulás logisztikai részlegén dolgozik, és a főnöködtől kaptál két feladatot a rendszer szoftverének frissítésére.
A rendszernek képesnek kell lennie arra, hogy egy játék nevét lekérdezze az adatbázisból.
Az adatbázis (name: String, quantity: Int) típusú tuple-ökből áll.
Valósítsd meg a getName(_:) függvényt, amely egy (name: String, quantity: Int) típusú tuple-t vár argumentumként.
let toy = (name: "Doll", quantity: 10)
getName(toy)
// Returns "Doll"
A játékpiac gyorsan változó, és ami népszerű, az nagyon gyorsan változik. Ezért szükség van egy függvényre, amely új játékot hoz létre.
Valósítsd meg a createToy(name:amount:) függvényt, amely a játék nevét tartalmazó name és a játék mennyiségét tartalmazó amount argumentumot vár.
createToy(name: "Doll", amount: 10)
// Returns (name: "Doll", amount: 10)
A manók a Mikulás műhelyében folyamatosan újabb játékokat készítenek, és a Mikulásnak nyilván kell tartania az egyes játékok mennyiségét. Ehhez a rendszernek képesnek kell lennie arra, hogy egy játék mennyiségét frissítse az adatbázisban.
Valósítsd meg az updateQuantity(_:toy:Amount:) függvényt, amely a következő argumentumokat várja:
toys, amely (name: String, quantity: Int) típusú tuple-ök tömbjét tartalmazza.toy, amely a frissítendő játék nevét tartalmazza.amount, amely a játék új mennyiségét tartalmazza.Feltételezheted, hogy a játék már benne van az adatbázisban, és nem kell ezt ellenőrizned.
let toys = [(name: "Doll", quantity: 10), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]
updateQuantity(toys, toy: "Doll", amount: 15)
// Returns [(name: "Doll", quantity: 15), (name: "Car", quantity: 5), (name: "Train", quantity: 3)]
A Mikulás szeretné, ha a játékokat az adatbázisban kategóriákba lehetne sorolni. Ez azért van, hogy könnyen megtalálják a játékokat, amikor kiszállítást kell végezniük, és hogy rendezni tudják a játékokat az adatbázisban.
Azonban amikor a rendszert először megvalósították, a kategóriakulcs elfelejtődött. Most a rendszernek képesnek kell lennie arra, hogy kategóriakulcsot adjon egy játékhoz az adatbázisban.
Valósítsd meg az addCategory(_:category:) függvényt, amely a következő argumentumokat várja:
toys, amely (name: String, quantity: Int) típusú tuple-ök tömbjét tartalmazza.category, amely a játékokhoz hozzáadandó kategóriakulcsot tartalmazza.Feltételezheted, hogy a játék már benne van az adatbázisban, és nem kell ezt ellenőrizned. Azt is feltételezheted, hogy a játékban még nincs kategóriakulcs.
let toys = [(name: "Car", quantity: 5), (name: "Train", quantity: 3)]
addCategory(toys, category: "Vehicle")
// Returns [(name: "Car", quantity: 5, category: "Vehicle"), (name: "Train", quantity: 3, category: "Vehicle")]
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Swift nyelvet 35 fogalom116 feladat segítségével, valódi emberi mentorálással, mindez ingyen.