Kurzusok
/
Swift
Swift
/
Feladatok
/
A Mikulás swifty segédje
A Mikulás swifty segédje

A Mikulás swifty segédje

Tanulófeladat

Bevezetés

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

Nevesített tuple-ök

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)

Tuple-ök módosítása

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)

Több érték visszaadása

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"

Tuple-ök felbontása

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

Utasítások

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.

1. A játék nevének lekérdezése

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"

2. Új játék hozzáadása az adatbázishoz

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)

3. Egy játék mennyiségének frissítése

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)]

4. Kategóriakulcs hozzáadása egy játékhoz

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")]
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Swift Exercism

Készen állsz elkezdeni a(z) A Mikulás swifty segédje feladatot?

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.