Seriály

Swift akademie pro začátečníky: zakládáme první projekt #7

Vítám vás u dalšího dílu naší akademie. Tento díl nebude podobný jako všechny ostatní. V tomto článku si totiž uděláte váš první projekt. Jak jste si mohli všimnout, záměrně jsem použil druhou osobu čísla množného, projekt si budete totiž dělat sami, ale nebojte se, nechám vám tu napsané nápovědy, které se vám popřípadě hodí. 

Před tím, než začnu se zadáním, vám představím ještě pár věcí, které v tomto projektu jednoznačně využijete. Tento projekt nebudeme dělat v Playgroundu tak, jak jsme zvyklí. Vytvoříme si plnohodnotný projekt a to touto cestou: Otevřeme Xcode, klikneme na Create new Xcode project, nahoře vybereme macOS, vybereme Command Line Tool, klikneme Next, pojmenujeme náš projekt a klikneme na Next. 

Prostředí vypadá téměr identicky. Ujistěte se, že máte otevřenou tzv. Debug Area, otevřeme ji pomocí CMD+Shift+Y. A to je všechna příprava, kterou budete muset udělat. Teď se přesuneme na části kódu, které vám chci ještě před začátkem ukázat.

Příprava

V Command Line Tool projektu můžeme použít novou metodu readline(). Tato metoda slouží k přečtení vstupu uživatele, můžeme ji použít pokud chceme, aby nám uživatel vložil svoje jméno

var jmeno = readLine()

Tímto se dostáváme k dalšímu celému odvětví Swiftu, které jsme si ještě nestihli představit, Optionals. Optionals by se dalo říct, že jsou další datový typ, který si můžeme představit jako takový box. Optionals se používají, pokud si nejsme jistí, zda naše proměnná dostane hodnotu. Pokud proměnná žádnou hodnotu nemá, používá se slovo nil. Zatím se Optionals mohou tvářit nevinně problém však přichází, pokud chceme s naší proměnnou jakkoliv pracovat. 

let cislo: Int? = 1

var vysledek = cislo + 1

Otazníkem Swiftu dáme vědět, že chceme aby proměnná cislo byla Optional, Xcode nám vrátí problém, ve kterém nám vysvětluje, že hodnotu Int? Nemůžeme přičíst k hodnotě Int. Abychom mohli pokračovat, musíme naší Optional „rozbalit“ a to pomocí několika metod. My si vysvětlíme čtyři nejzásadnější: 

Force unwrap(vynucení rozbalení)

Tato metoda se používá zřídka, a to kvůli tomu, že je nebezpečné ji používat. Ukážeme si její použití:

let cislo: Int? = nil

var vysledek = cislo! + 1

Vykřičníkem za proměnnou cislo vynutíme její rozbalení, pokud ale hodnota proměnné číslo bude nil náš program se zastaví. Tuto metodu můžeme používat jen, když jsme si 100% jistí, že hodnota proměnné číslo je Int? a mi ji můžeme v klidu rozbalit.

Nil coalescing(výchozí hodnota)

Teď si představíme jednu z bezpečnějších metod: 

let narozeni: Int? = nil

let narozeniUzivatele = narozeni ?? 2000

Máme příklad, kde se uživatel rozhodl svoje datum narození nezadat, v tom případě si nemůžeme být jisti, zda hodnota narozeni existuje. Proto můžeme použít určení výchozí hodnoty a to pomocí dvou otazníků a napsání hodnoty, kterou cheme použít v případě, že proměnná budel nil. 

Pomocí podmínky

Tato metoda je také jedna z bezpečnějších a využíváme v ní podmínky:

let datumNarozeni: Int? = 1910

if let narozeni = datumNarozeni {

    print(narozeni)

} else {

    print("Datum narození nebylo zadáno")

}

Použijeme podmínku a pokusíme se hodnotu Int? přiřadit k normální proměnné s datovým typem Int, pokud se tato akce nepodaří(hodnota je nil) spustí se else blok.

Guard 

Tato metoda je také bezpečná a je podobná metodě pomocí podmínky. Guard se používá hlavně ve funkcích. Ukážeme si příklad:

var vstup1: Int? = nil

guard let cislo1 = Float(vstup1) else {return}

Pokud proměnná cislo1 nepůjde převést na datový typ float, tudíž hodnot bude nil, naše funkce okamžitě skončí a další kód v naší funkci se nespustí.

.lowercased()

Před začátkem si ještě představíme další metodu, kterou můžeme použít u textových řetězců, .lowercased(). Jak už jsme si říkali, Swift je velmi náchylný na velká a malá písmenn. Ve Swiftu se ahoj nerovná Ahoj. Pokud tedy chceme porovnat nějaký vstup uživatele s daným slovem, je lepší vstup převést jen na malá písmena. K tomu se používá metoda .lowercased()

let slovo = "AhOj"

slovo.lowercased()

Teď už vše potřebné umíte a můžeme se přesunout k zadání.

Zadání

Chci po vás, abyste vytvořili jednoduchou kalkulačku, která se uživatele zeptá na číslo 1, operaci a číslo 2. Poté, co uživatel dostane svůj výsledek se ho zeptejte, zda chce spustit kalkulačku od začátku. Pokud ano, kalkulačka se restartuje, pokud ne, kalkulačka se vypne. 

Doporučuji vám využívat funkce, podmínky a Switche.

Až budete mít projekt hotový, nebo si nebudete vědět rady, rád vám odpovím buď v diskuzi, nebo na emailu admin@ceskymac.cz . Posílejte mi vaše hotové projekty, budu se snažit vám odpovědět zpět a sdělím vám i zpětnou vazbu co je dobré, nebo co by šlo změnit. 

Rešení

Přiložím vám sem kód, jak bych kalkulačku napsal já. Používal jsem jen věci, které jsme se společně naučili.

Prosím vás, abyste si řešení nečetli, pokud jste se nějakou dobu nesnažili kód napsat sami, uškodíte tím jen sami sobě. 

Chystáte se přečíst řešení tohoto projektu
//

//  main.swift

//  SwiftProjektCeskyMac

//

//  Created by Matyáš Himmer on 19/08/2020.

//  Copyright © 2020 Matyáš Himmer. All rights reserved.

//

import Foundation

// Funkce

func restartovat() {

    zacitKalkulacku()

}

func chybnyVstupCislo() {

        print("Výpočet se nezdařil, prosíme Vás, abyste používali pouze čísla.")

}

func chybnyVstupOperator() {

        print("Výpočet se nezdařil, prosíme Vás, abyste používali pouze operátory +,-,*,/.")

}

// Kalkulačka

func zacitKalkulacku() {

print("Vítám vás v naší kalkukačce")

print("Prosím, zadejte číslo: ")

let vstup1 = readLine()!

    guard let cislo1 = Float(vstup1) else {return chybnyVstupCislo()}

print("Prosím, zadejte operaci +,-,/,* : ")

let znamenko = readLine()

print("Prosím, zadejte druhé číslo: ")

let vstup2 = readLine()!

    guard let cislo2 = Float(vstup2) else {return chybnyVstupCislo()}

    switch znamenko {

    case "+":

        

        print("")

        print("Výsledek je: ")

        print(cislo1 + cislo2)

       

    case "-":

           

            print("")

            print("Výsledek je: ")

            print(cislo1 - cislo2)

            

    case "/":

           print("")

           print("Výsledek je: ")

            

           print(cislo1 / cislo2)

          

    case "*":

            print("")

            print("Výsledek je: ")

            print(cislo1 * cislo2)

          

    default:

        chybnyVstupOperator()

    }

    print("")

    print("")

    print("Přejete si kalkulačku spustit znovu? ano/ne")

    

    let rozhodnuti = readLine()

        if rozhodnuti?.lowercased() == "ano" {

            restartovat()

        } else {

            print("Děkuji za použití! :)")

        }

    

}

zacitKalkulacku()
Štítky

Matyáš Himmer

Fanoušek Applu od roku 2011, rád fotím a programuji. Články píši ve svém volném čase, studuji informační technologie na SSPŠ.

Jeden komentář

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

Close