From c81a00812fe8fa8fd8c82db98f022150a6721758 Mon Sep 17 00:00:00 2001 From: Yannis Lang Date: Thu, 4 Feb 2021 15:28:18 +0100 Subject: [PATCH] all playgrounds and reading book done --- .DS_Store | Bin 0 -> 8196 bytes .../Contents.swift | 37 +++++++++-- .../Contents.swift | 35 ++++++++-- .../Contents.swift | 28 ++++++-- .../Contents.swift | 37 +++++++++-- .../Contents.swift | 22 +++---- .../Contents.swift | 23 ++++--- .../Contents.swift | 20 ++++-- .../Contents.swift | 21 +++--- .../Contents.swift | 8 +-- .../Contents.swift | 11 +--- .../Contents.swift | 5 +- .../Contents.swift | 9 +-- .../Contents.swift | 8 ++- .../Contents.swift | 6 +- .../Contents.swift | 11 +++- .../Contents.swift | 18 +++-- .../Contents.swift | 5 +- .../Contents.swift | 13 ++-- .../Contents.swift | 36 +++++----- .../Contents.swift | 20 ++++-- .../Contents.swift | 18 +++-- .../Contents.swift | 10 ++- .../Contents.swift | 8 ++- .../Contents.swift | 20 +++++- .../Contents.swift | 17 ++++- .../Contents.swift | 14 ++-- .../Contents.swift | 12 ++-- .../Contents.swift | 62 +++++++++++++++--- .../Contents.swift | 38 +++++++++-- .../Contents.swift | 25 +++++++ .../Contents.swift | 27 ++++++++ .../Contents.swift | 15 ++++- .../Contents.swift | 33 +++++++++- .../Contents.swift | 10 ++- .../Contents.swift | 19 +++++- .../Contents.swift | 30 ++++++++- .../Contents.swift | 23 ++++++- .../Contents.swift | 9 +-- .../Contents.swift | 14 ++-- .../Contents.swift | 10 +-- .../Contents.swift | 5 ++ .../Contents.swift | 12 +++- .../Contents.swift | 15 ++++- .../Contents.swift | 6 +- .../Contents.swift | 37 ++++++++--- .../Contents.swift | 20 ++++-- .../Contents.swift | 24 +++++-- .../Contents.swift | 7 +- .../Contents.swift | 14 ++-- .../Contents.swift | 8 ++- .../Contents.swift | 12 +++- .../Contents.swift | 5 +- .../Contents.swift | 16 +++-- .../Contents.swift | 14 +++- .../Contents.swift | 28 +++++++- .../Contents.swift | 15 ++++- .../Contents.swift | 23 ++++++- .../Contents.swift | 26 +++++++- .../Contents.swift | 25 +++++-- .../Contents.swift | 25 +++++-- .../Contents.swift | 13 ++-- .../Contents.swift | 15 +++-- .../Contents.swift | 9 ++- .../Contents.swift | 27 ++++++-- .../Contents.swift | 10 ++- .../Contents.swift | 35 +++++++--- .../Contents.swift | 13 +++- .../Contents.swift | 18 +++-- .../Contents.swift | 46 +++++++++---- .../Contents.swift | 37 ++++++++--- .../Contents.swift | 16 +++++ .../Contents.swift | 16 +++++ .../Contents.swift | 35 ++++++++-- .../Contents.swift | 18 ++++- .../Contents.swift | 12 +++- .../Contents.swift | 56 +++++++++++++--- .../Contents.swift | 15 ++++- Lab - Use Documentation.pages | Bin 0 -> 183353 bytes 79 files changed, 1192 insertions(+), 323 deletions(-) create mode 100644 .DS_Store create mode 100755 Lab - Use Documentation.pages diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..0e5b9be29d69a7f4f5b5893d7d9e2adf49c4dcfb GIT binary patch literal 8196 zcmeHMTTj$L6g~qhY%wuwVgwbFCO*gm8ukIv__8h+LxRDu2oGMcOB;5R+LCU|N(jlu z#8(sFjJ|q_KSTW!{ttb}@5~fv_oC%NF=2*u&UAX_JEz|{GqY2ONR%VHNHju3d0Z?D zr%`n&{G6|j(iis(Lkf(idDmaBx_%Y+g$`}qp&8H&Xa+O`ngPwg|G)tDY%cj8`@VXr zYt4XW;6yUO>w}4lWhs^|CFRnAN*)0qbLf@@ZTZt5(&P@vQY>3aq6bB&p^$2*h>sW| zJ~;?A9M4O!eoIL;oP@LtoY=C6PbeZjcnDLflPD>vYt4XWppyYUyXWXSZBU)Uw)6XK zJR94SMGhR?*P|LmRBhA#+@?Krpj`*LM?MAQq{j%hp0qFkFP@PFeTN!tx-WmHTWvNr z<1Y_CtDA1U5l&2e7k&M?Qv-u}W5_U!GlucFQuCXY&)qHo5gYS)?{&a*D&%IuFfqziC(;V z`|kaRkDtDLRii|__|aK)e^7rzE5+SbCGcF|+dw~$8KDKRTE&`r4c9cexNG1KEF(&r z@_rkv2Z&OHSlMmd{{TiZPNQvjJ`h}>ty72y`asBpOPpbE5*aqufy+oCy!B8w;5)Z$ z$Q85#*y6Wh%h~L4jwbD0?qV;LEV!^S2V|d`nHb_s?u|SPuOno(18nPP90|_*B=W_S z&vPE`QSzH9per$N1%7%%^`~h=+Hdx4{Y?z2l3N!uA6)?!}>|~D2^F(CQt3U;L z$TP^pywBvDj7JjhQYvc{o{Dh<%D0`eCe|YAI-pCJt z=3ti3fYJ4McJeB7I6v7&*S)CE!u(0DhXyUtEZqUtJ;>{r>0MS(@j4L;033ViS00S; z`G2 0 { + remainingFirePower -= 1 + } else { + print("You have no more fire power.") + } + } +} /*: Create a new instance of `Fighter` called `destroyer`. A `Fighter` will be able to shoot incoming objects to avoid colliding with them. After initialization, set `weapon` to "Laser" and `remainingFirePower` to 10. Note that since `Fighter` inherits from `Spaceship`, it also has properties for `name`, `health`, and `position`, and has methods for `moveLeft()`, `moveRight()`, and `wasHit()` even though you did not specifically add them to the declaration of `Fighter`. Knowing that, set `name` to "Destroyer," print `position`, then call `moveRight()` and print `position` again. */ - - +let destroyer = Fighter() +destroyer.weapon = "Laser" +destroyer.remainingFirePower = 10 +destroyer.name = "Destroyer" +print(destroyer.position) +destroyer.moveRight() +print(destroyer.position) /*: Try to print `weapon` on `falcon`. Why doesn't this work? Provide your answer in a comment or a print statement below, and remove any code you added that doesn't compile. */ - +// falcon is Spaceship, weapon is property of Fighter not Spaceship /*: Add a method to `fighter` called `fire()`. This should check to see if `remainingFirePower` is greater than 0, and if so, should decrement `remainingFirePower` by one. If `remainingFirePower` is not greater than 0, print "You have no more fire power." Call `fire()` on `destroyer` a few times and print `remainingFirePower` after each method call. */ - +destroyer.fire() +print(destroyer.remainingFirePower) +destroyer.fire() +print(destroyer.remainingFirePower) +destroyer.fire() +print(destroyer.remainingFirePower) +destroyer.fire() +print(destroyer.remainingFirePower) +destroyer.fire() +print(destroyer.remainingFirePower) //: [Previous](@previous) | page 2 of 4 | [Next: Exercise - Override Methods and Properties](@next) diff --git a/Lab - Classes.playground/Pages/3. Exercise - Override Methods and Properties.xcplaygroundpage/Contents.swift b/Lab - Classes.playground/Pages/3. Exercise - Override Methods and Properties.xcplaygroundpage/Contents.swift index a25449d..db02522 100644 --- a/Lab - Classes.playground/Pages/3. Exercise - Override Methods and Properties.xcplaygroundpage/Contents.swift +++ b/Lab - Classes.playground/Pages/3. Exercise - Override Methods and Properties.xcplaygroundpage/Contents.swift @@ -39,16 +39,36 @@ class Fighter: Spaceship { /*: Define a new class `ShieldedShip` that inherits from `Fighter`. Add a variable property `shieldStrength` that defaults to 25. Create a new instance of `ShieldedShip` called `defender`. Set `name` to "Defender" and `weapon` to "Cannon." Call `moveRight()` and print `position`, then call `fire()` and print `remainingFirePower`. */ - +class ShieldedShip: Fighter { + var shieldStrength = 25 + override func wasHit() { + if shieldStrength > 0 { + shieldStrength -= 5 + } else { + super.wasHit() + } + } +} + +let defender = ShieldedShip() +defender.name = "Defender" +defender.weapon = "Cannon" +defender.moveRight() +print(defender.position) +defender.fire() +print(defender.remainingFirePower) /*: Go back to your declaration of `ShieldedShip` and override `wasHit()`. In the body of the method, check to see if `shieldStrength` is greater than 0. If it is, decrement `shieldStrength` by 5. Otherwise, decrement `health` by 5. Call `wasHit()` on `defender` and print `shieldStrength` and `health`. */ - - +defender.wasHit() +print(defender.shieldStrength) +print(defender.health) /*: When `shieldStrength` is 0, all `wasHit()` does is decrement `health` by 5. That's exactly what the implementation of `wasHit()` on `Spaceship` does! Instead of rewriting that, you can call through to the superclass implementation of `wasHit()`. Go back to your implementation of `wasHit()` on `ShieldedShip` and remove the code where you decrement `health` by 5 and replace it with a call to the superclass' implementation of the method. Call `wasHit()` on `defender`, then print `shieldStrength` and `health`. */ - +defender.wasHit() +print(defender.shieldStrength) +print(defender.health) //: [Previous](@previous) | page 3 of 4 | [Next: Exercise - Class Memberwise Initializers and References](@next) diff --git a/Lab - Classes.playground/Pages/4. Exercise - Class Memberwise Initializers and References.xcplaygroundpage/Contents.swift b/Lab - Classes.playground/Pages/4. Exercise - Class Memberwise Initializers and References.xcplaygroundpage/Contents.swift index a8e5b19..36a341d 100644 --- a/Lab - Classes.playground/Pages/4. Exercise - Class Memberwise Initializers and References.xcplaygroundpage/Contents.swift +++ b/Lab - Classes.playground/Pages/4. Exercise - Class Memberwise Initializers and References.xcplaygroundpage/Contents.swift @@ -7,6 +7,12 @@ class Spaceship { let name: String var health: Int var position: Int + + init(name: String, health: Int, position: Int) { + self.name = name + self.health = health + self.position = position + } func moveLeft() { position -= 1 @@ -27,6 +33,12 @@ class Spaceship { class Fighter: Spaceship { let weapon: String var remainingFirePower: Int + + init(weapon: String, remainingFirePower: Int, name: String, health: Int, position: Int) { + self.weapon = weapon + self.remainingFirePower = remainingFirePower + super.init(name: name, health: health, position: position) + } func fire() { if remainingFirePower > 0 { @@ -39,6 +51,11 @@ class Fighter: Spaceship { class ShieldedShip: Fighter { var shieldStrength: Int + + init(shieldStrength: Int, weapon: String, remainingFirePower: Int, name: String, health: Int, position: Int) { + self.shieldStrength = shieldStrength + super.init(weapon: weapon, remainingFirePower: remainingFirePower, name: name, health: health, position: position) + } override func wasHit() { if shieldStrength > 0 { @@ -53,27 +70,35 @@ class ShieldedShip: Fighter { Then create an instance of `Spaceship` below called `falcon`. Use the memberwise initializer you just created. The ship's name should be "Falcon." */ - +let falcon = Spaceship(name: "Falcon", health: 50, position: 0) /*: Writing initializers for subclasses can get tricky. Your initializer needs to not only set the properties declared on the subclass, but also set all of the uninitialized properties on classes that it inherits from. Go to the declaration of `Fighter` and write an initializer that takes an argument for each property on `Fighter` and for each property on `Spaceship`. Set the properties accordingly. (Hint: you can call through to a superclass' initializer with `super.init` *after* you initialize all of the properties on the subclass). Then create an instance of `Fighter` below called `destroyer`. Use the memberwise initializer you just created. The ship's name should be "Destroyer." */ - - +let destroyer = Fighter(weapon: "Laser", remainingFirePower: 10, name: "Destroyer", health: 50, position: 0) /*: Now go add an initializer to `ShieldedShip` that takes an argument for each property on `ShieldedShip`, `Fighter`, and `Spaceship`, and sets the properties accordingly. Remember that you can call through to the initializer on `Fighter` using `super.init`. Then create an instance of `ShieldedShip` below called `defender`. Use the memberwise initializer you just created. The ship's name should be "Defender." */ - +let defender = ShieldedShip(shieldStrength: 100, weapon: "Cannon", remainingFirePower: 10, name: "Defender", health: 100, position: 0) /*: Create a new constant named `sameShip` and set it equal to `falcon`. Print out the position of `sameShip` and `falcon`, then call `moveLeft()` on `sameShip` and print out the position of `sameShip` and `falcon` again. Did both positions change? Why? If both were structs instead of classes, would it be the same? Why or why not? Provide your answer in a comment or print statement below. */ - - +let sameShip = falcon +print(falcon.position) +print(sameShip.position) +sameShip.moveLeft() +print(falcon.position) +print(sameShip.position) + +//falcon contains memory adress of object so we assign to sameShip this same adress +//so sameShip and falcon are the same object any edit on one will be done one the other +//if it is struct, assign falcon to sameShip just make copy of instance +//edit on one will don't make any change on the other /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Collections.playground/Pages/1. Exercise - Arrays.xcplaygroundpage/Contents.swift b/Lab - Collections.playground/Pages/1. Exercise - Arrays.xcplaygroundpage/Contents.swift index fbcf943..f9d71ae 100644 --- a/Lab - Collections.playground/Pages/1. Exercise - Arrays.xcplaygroundpage/Contents.swift +++ b/Lab - Collections.playground/Pages/1. Exercise - Arrays.xcplaygroundpage/Contents.swift @@ -3,31 +3,29 @@ Assume you are an event coordinator for a community charity event and are keeping a list of who has registered. Create a variable `registrationList` that will hold strings. It should be empty after initialization. */ - - +var registrationList = [String]() /*: Your friend Sara is the first to register for the event. Add her name to `registrationList` using the `append(_:)` method. Print the contents of the collection. */ - - +registrationList.append("Sara") +print(registrationList) /*: Add four additional names into the array using the `+=` operator. All of the names should be added in one step. Print the contents of the collection. */ - - +registrationList += ["Samy", "Jonh", "Steve", "Franck"] +print(registrationList) /*: Use the `insert(_:at:)` method to add `Charlie` into the array as the second element. Print the contents of the collection. */ - - +registrationList.insert("Charlie", at: 1) /*: Someone had a conflict and decided to transfer her registration to someone else. Use array subscripting to change the sixth element to `Rebecca`. Print the contents of the collection. */ - - +registrationList[5] = "Rebecca" +print(registrationList) /*: Call `removeLast()` on `registrationList`. If done correctly, this should remove `Rebecca` from the collection. Store the result of `removeLast()` into a new constant `deletedItem`, then print `deletedItem`. */ - - +let deletedItem = registrationList.removeLast() +print(deletedItem) //: page 1 of 4 | [Next: App Exercise - Activity Challenge](@next) diff --git a/Lab - Collections.playground/Pages/2. App Exercise - Activity Challenge.xcplaygroundpage/Contents.swift b/Lab - Collections.playground/Pages/2. App Exercise - Activity Challenge.xcplaygroundpage/Contents.swift index d9e7443..af2472e 100644 --- a/Lab - Collections.playground/Pages/2. App Exercise - Activity Challenge.xcplaygroundpage/Contents.swift +++ b/Lab - Collections.playground/Pages/2. App Exercise - Activity Challenge.xcplaygroundpage/Contents.swift @@ -7,26 +7,31 @@ Using arrays of type `String`, create at least two lists, one for walking challenges, and one for running challenges. Each should have at least two challenges and should be initialized using an array literal. Feel free to create more lists for different activities. */ - - +var walkingChallenges: [String] = ["Walk 3 miles a day", "Walk up stairs instead of using elevator"] +var runningChallenges: [String] = ["Run 5 days a week", "Run 100 miles in a month"] /*: In your app you want to show all of these lists on the same screen grouped into sections. Create a `challenges` array that holds each of the lists you have created (it will be an array of arrays). Using `challenges`, print the first element in the second challenge list. */ - - +var challenges = [walkingChallenges, runningChallenges] +print(challenges[1][0]) /*: All of the challenges will reset at the end of the month. Use the `removeAll` to remove everything from `challenges`. Print `challenges`. */ - - +challenges.removeAll() +print(challenges) /*: Create a new array of type `String` that will represent challenges a user has committed to instead of available challenges. It can be an empty array or have a few items in it. */ - +var committedChallenges = [String]() /*: Write an if statement that will use `isEmpty` to check if there is anything in the array. If there is not, print a statement asking the user to commit to a challenge. Add an else-if statement that will print "The challenge you have chosen is " if the array count is exactly 1. Then add an else statement that will print "You have chosen multiple challenges." */ - - +if committedChallenges.isEmpty { + print("commit a challenge first !") +} else if committedChallenges.count == 1 { + print("The challenge you have chosen is \(committedChallenges[0])") +} else { + print("You have chosen multiple challenges.") +} //: [Previous](@previous) | page 2 of 4 | [Next: Exercise - Dictionaries](@next) diff --git a/Lab - Collections.playground/Pages/3. Exercise - Dictionaries.xcplaygroundpage/Contents.swift b/Lab - Collections.playground/Pages/3. Exercise - Dictionaries.xcplaygroundpage/Contents.swift index e3d52d8..4590197 100644 --- a/Lab - Collections.playground/Pages/3. Exercise - Dictionaries.xcplaygroundpage/Contents.swift +++ b/Lab - Collections.playground/Pages/3. Exercise - Dictionaries.xcplaygroundpage/Contents.swift @@ -3,22 +3,25 @@ Create a variable `[String: Int]` dictionary that can be used to look up the number of days in a particular month. Use a dictionary literal to initialize it with January, February, and March. January contains 31 days, February has 28, and March has 31. Print the dictionary. */ - - +var daysNumberInMonths: [String: Int] = ["January": 31, "February": 28, "March": 31] +print(daysNumberInMonths) /*: Using subscripting syntax to add April to the collection with a value of 30. Print the dictionary. */ - +daysNumberInMonths["April"] = 30 +print(daysNumberInMonths) /*: It's a leap year! Update the number of days in February to 29 using the `updateValue(_:, forKey:)` method. Print the dictionary. */ - +daysNumberInMonths.updateValue(29, forKey: "February") /*: Use if-let syntax to retrieve the number of days under "January". If the value is there, print "January has 31 days", where 31 is the value retrieved from the dictionary. */ - +if let januaryDays = daysNumberInMonths["January"] { + print("January has \(januaryDays) days.") +} /*: Given the following arrays, create a new [String : [String]] dictionary. `shapesArray` should use the key "Shapes" and `colorsArray` should use the key "Colors". Print the resulting dictionary. @@ -26,10 +29,13 @@ let shapesArray = ["Circle", "Square", "Triangle"] let colorsArray = ["Red", "Green", "Blue"] - +let shapesColors: [String: [String]] = ["Shapes": shapesArray, "Colors": colorsArray] +print(shapesColors) /*: Print the last element of `colorsArray`, accessing it through the dictionary you've created. You'll have to use if-let syntax or the force unwrap operator to unwrap what is returned from the dictionary before you can access an element of the array. */ - +if let colors = shapesColors["Colors"] { + print(colors.last ?? "No color in colors") +} //: [Previous](@previous) | page 3 of 4 | [Next: App Exercise - Pacing](@next) diff --git a/Lab - Collections.playground/Pages/4. App Exercises - Pacing.xcplaygroundpage/Contents.swift b/Lab - Collections.playground/Pages/4. App Exercises - Pacing.xcplaygroundpage/Contents.swift index 6b5ba08..2b60a0f 100644 --- a/Lab - Collections.playground/Pages/4. App Exercises - Pacing.xcplaygroundpage/Contents.swift +++ b/Lab - Collections.playground/Pages/4. App Exercises - Pacing.xcplaygroundpage/Contents.swift @@ -7,28 +7,31 @@ Create a dictionary `paces` of type [String: Double] and assign it a dictionary literal with "Easy", "Medium", and "Fast" keys corresponding to values of 10.0, 8.0, and 6.0. These numbers correspond to mile pace in minutes. Print the dictionary. */ - - +var paces: [String: Double] = ["Easy": 10.0, "Medium": 8.0, "Fast": 6.0] +print(paces) /*: Add a new key/value pair to the dictionary. The key should be "Sprint" and the value should be 4.0. Print the dictionary. */ - - +paces["Sprint"] = 4.0 +print(paces) /*: Imagine the user in question gets faster over time and decides to update his/her pacing on runs. Update the values of "Medium" and "Fast" to 7.5 and 5.8, respectively. Print the dictionary. */ - +paces.updateValue(7.5, forKey: "Medium") +paces.updateValue(5.8, forKey: "Fast") +print(paces) /*: Imagine the user in question decides not to store "Sprint" as one his/her regular paces. Remove "Sprint" from the dictionary. Print the dictionary. */ - - +paces.removeValue(forKey: "Sprint") +print(paces) /*: When a user chooses a pace, you want the app to print a statement stating that it will keep him/her on pace. Imagine a user chooses "Medium." Accessing the value from the dictionary, print a statement saying "Okay! I'll keep you at a minute mile pace." */ - - +if let pace = paces["Medium"] { + print("Okay! I'll keep you at a \(pace) minute mile pace.") +} /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Constants and Variables.playground/Pages/1. Exercise - Constants.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/1. Exercise - Constants.xcplaygroundpage/Contents.swift index 8721318..e9edb5b 100644 --- a/Lab - Constants and Variables.playground/Pages/1. Exercise - Constants.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/1. Exercise - Constants.xcplaygroundpage/Contents.swift @@ -3,16 +3,16 @@ Declare a constant called `friends` to represent the number of friends you have on social media. Give it a value between 50 and 1000. Print out the value by referencing your constant. */ - - +let friends = 13 +print(friends) /*: Now assume you go through and remove friends that aren't active on social media. Attempt to update your `friends` constant to a lower number than it currently is. Observe what happens and then move to the next step. */ - +//friends = 12 /*: Does the above code compile? Why not? Print your explanation to the console using the `print` function. Go back and delete your line of code that updates the `friends` constant to a lower number so that the playground will compile properly. */ - +print("We can't update value of constant. So compiler raises error : \nCannot assign to value: 'friends' is a 'let' constant") //: page 1 of 10 | [Next: App Exercise - Step Goal](@next) diff --git a/Lab - Constants and Variables.playground/Pages/10. App Exercise - Percent Completed.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/10. App Exercise - Percent Completed.xcplaygroundpage/Contents.swift index 21166b7..f34a93b 100644 --- a/Lab - Constants and Variables.playground/Pages/10. App Exercise - Percent Completed.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/10. App Exercise - Percent Completed.xcplaygroundpage/Contents.swift @@ -1,16 +1,11 @@ -/*: - ## App Exercise - Percent Completed - - >These exercises reinforce Swift concepts in the context of a fitness tracking app. - - You decide that your fitness tracking app should show the user what percentage of his/her goal has been achieved so far today. Declare a variable called `percentCompleted` and set it to 0. Do not explicity assign it a type. - */ +//var percentCompleted = 0 +var percentCompleted: Double = 0 /*: Imagine that partway through the day a user has taken 3,467 steps out of the 10,000 step goal. This means he/she is 34.67% of the way to his/her goal. Assign 34.67 to `percentCompleted`. Does the code compile? Go back and explicity assign a type to `percentCompleted` that will allow the code to compile. */ - +percentCompleted = 34.67 /*: diff --git a/Lab - Constants and Variables.playground/Pages/2. App Exercise - Step Goal.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/2. App Exercise - Step Goal.xcplaygroundpage/Contents.swift index b71a821..2dc5967 100644 --- a/Lab - Constants and Variables.playground/Pages/2. App Exercise - Step Goal.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/2. App Exercise - Step Goal.xcplaygroundpage/Contents.swift @@ -5,11 +5,12 @@ Your fitness tracking app needs to know goal number of steps per day. Create a constant `goalSteps` and set it to 10000. */ - +let goalSteps = 10_000 /*: Use two `print` functions to print two separate lines to the console. The first line should say "Your step goal for the day is:", and the second line should print the value of `goalSteps` by referencing your constant. */ - +print("Your step goal for the day is:") +print(goalSteps) //: [Previous](@previous) | page 2 of 10 | [Next: Exercise - Variables](@next) diff --git a/Lab - Constants and Variables.playground/Pages/3. Exercise - Variables.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/3. Exercise - Variables.xcplaygroundpage/Contents.swift index 1b6fe9b..87cb89c 100644 --- a/Lab - Constants and Variables.playground/Pages/3. Exercise - Variables.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/3. Exercise - Variables.xcplaygroundpage/Contents.swift @@ -3,16 +3,17 @@ Declare a variable `schooling` and set it to the number of years of school that you have completed. Print `schooling` to the console. */ - +var schooling = 5 +print(schooling) /*: Now imagine you just completed an additional year of school, and update the `schooling` variable accordingly. Print `schooling` to the console. */ - - +schooling += 1 +print(schooling) /*: Does the above code compile? Why is this different than trying to update a constant? Print your explanation to the console using the `print` function. */ - +print("Works, because value of variable can be updated !") //: [Previous](@previous) | page 3 of 10 | [Next: App Exercise - Step Count](@next) diff --git a/Lab - Constants and Variables.playground/Pages/4. App Exercise - Step Count.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/4. App Exercise - Step Count.xcplaygroundpage/Contents.swift index 4c95fb5..aed9fb8 100644 --- a/Lab - Constants and Variables.playground/Pages/4. App Exercise - Step Count.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/4. App Exercise - Step Count.xcplaygroundpage/Contents.swift @@ -5,11 +5,13 @@ Create a variable called `steps` that will keep track of the number of steps you take throughout the day. Set its initial value to 0 to represent the step count first thing in the morning. Print `steps` to the console. */ - - +var steps = 0 +print(steps) /*: Now assume the tracker has been keeping track of steps all morning, and you want to show the user the latest step count. Update `steps` to be 2000. Print `steps` to the console. Then print "Good job! You're well on your way to your daily goal." */ - +steps = 2000 +print(steps) +print("Good job! You're well on your way to your daily goal.") //: [Previous](@previous) | page 4 of 10 | [Next: Exercise - Constant or Variable?](@next) diff --git a/Lab - Constants and Variables.playground/Pages/5. Exercise - Constant Or Variable.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/5. Exercise - Constant Or Variable.xcplaygroundpage/Contents.swift index 1d38a49..d235e9a 100644 --- a/Lab - Constants and Variables.playground/Pages/5. Exercise - Constant Or Variable.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/5. Exercise - Constant Or Variable.xcplaygroundpage/Contents.swift @@ -10,7 +10,11 @@ For each of the metrics above, declare either a constant or a variable and assign it a value corresponding to a hypothetical post. Be sure to use proper naming conventions. */ - +var numberOfLikes = 12 +var numberOfComments = 2 +let yearCreated = 2021 +let monthCreated = 2 +let dayCreated = 1 diff --git a/Lab - Constants and Variables.playground/Pages/6. App Exercise - Constant or Variable.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/6. App Exercise - Constant or Variable.xcplaygroundpage/Contents.swift index a9bfc4b..819ace5 100644 --- a/Lab - Constants and Variables.playground/Pages/6. App Exercise - Constant or Variable.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/6. App Exercise - Constant or Variable.xcplaygroundpage/Contents.swift @@ -12,7 +12,16 @@ - Average heart rate: The user's average heart rate over the last 24 hours */ - +let name = "Yannis" +print("Name will never change") +var age = 23 +print("Age update each birthday ") +var numberOfSteps = 1360 +print("steps is updated throught day") +let goalSteps = 3500 +print("Goal is fixed at given moment") +var averageHeartRate = 75 +print("average will be updated throught day") diff --git a/Lab - Constants and Variables.playground/Pages/7. Exercise - Types and Type Safety.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/7. Exercise - Types and Type Safety.xcplaygroundpage/Contents.swift index 6a26c32..fbe9811 100644 --- a/Lab - Constants and Variables.playground/Pages/7. Exercise - Types and Type Safety.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/7. Exercise - Types and Type Safety.xcplaygroundpage/Contents.swift @@ -3,21 +3,25 @@ Declare two variables, one called `firstDecimal` and one called `secondDecimal`. Both should have decimal values. Look at both of their types by holding Option and clicking on the variable name. */ - +var firstDecimal = 1.0 +var secondDecimal = 2.0 /*: Declare a variable called `trueOrFalse` and give it a boolean value. Try to assign it to `firstDecimal` like so: `firstDecimal = trueOrFalse`. Does it compile? Print a statement to the console explaining why not, and remove the line of code that will not compile. */ - - +var trueOrFalse = true +//firstDecimal = trueOrFalse +print("we can't assign a boolean value to double variable, we can't assign value of type to an other one") /*: Declare a variable and give it a string value. Then try to assign it to `firstDecimal`. Does it compile? Print a statement to the console explaining why not, and remove the line of code that will not compile. */ - - +var myMessage = "Hello" +//firstDecimal = myMessage +print("we can't assign a string value to double variable, we can't assign value of type to an other one") /*: Finally, declare a variable with a whole number value. Then try to assign it to `firstDecimal`. Why won't this compile even though both variables are numbers? Print a statement to the console explaining why not, and remove the line of code that will not compile. */ - - +var myWholeNumber = 1 +//firstDecimal = myWholeNumber +print("we can't assign a int value to double variable, we can't assign value of type to an other one") //: [Previous](@previous) | page 7 of 10 | [Next: App Exercise - Tracking Different Types](@next) diff --git a/Lab - Constants and Variables.playground/Pages/8. App Exercise - Tracking Different Types.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/8. App Exercise - Tracking Different Types.xcplaygroundpage/Contents.swift index 1badf6b..d33e1e1 100644 --- a/Lab - Constants and Variables.playground/Pages/8. App Exercise - Tracking Different Types.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/8. App Exercise - Tracking Different Types.xcplaygroundpage/Contents.swift @@ -5,11 +5,12 @@ You have declared a number of constants and variables to keep track of fitness information. Declare one more variable with a boolean value called `hasMetStepGoal`. */ - +var hasMetStepGoal = false /*: When you declared a constant for goal number of steps and a variable for current step count, you likely assigned each a value in the thousands. This can be difficult to read. Redeclare this constant and variable and, when assigning each a value in the thousands, format the number so that it is more readable. */ - +var numberOfSteps = 3_500 +var goalSteps = 15_000 //: [Previous](@previous) | page 8 of 10 | [Next: Exercise - Type Inference and Required Values](@next) diff --git a/Lab - Constants and Variables.playground/Pages/9. Exercise - Type Inference and Required Values.xcplaygroundpage/Contents.swift b/Lab - Constants and Variables.playground/Pages/9. Exercise - Type Inference and Required Values.xcplaygroundpage/Contents.swift index 5c81e84..447a65d 100644 --- a/Lab - Constants and Variables.playground/Pages/9. Exercise - Type Inference and Required Values.xcplaygroundpage/Contents.swift +++ b/Lab - Constants and Variables.playground/Pages/9. Exercise - Type Inference and Required Values.xcplaygroundpage/Contents.swift @@ -3,21 +3,24 @@ Declare a variable called `name` of type `String`, but do not give it a value. Print `name` to the console. Does the code compile? Remove any code that will not compile. */ - - +var name: String +//print(name) +//Variable 'name' used before being initialized, we need to give some value before use it /*: Now assign a value to `name`, and print it to the console. */ - +name = "Yannis" +print(name) /*: Declare a variable called `distanceTraveled` and set it to 0. Do not give it an explicit type. */ - +//var distanceTraveled = 0 +var distanceTraveled: Double = 0 /*: Now assign a value of 54.3 to `distanceTraveled`. Does the code compile? Go back and set an explicit type on `distanceTraveled` so the code will compile. */ - +distanceTraveled = 54.3 //: [Previous](@previous) | page 9 of 10 | [Next: App Exercise - Percent Completed](@next) diff --git a/Lab - Control Flow.playground/Pages/1. Exercise - Logical Operators.xcplaygroundpage/Contents.swift b/Lab - Control Flow.playground/Pages/1. Exercise - Logical Operators.xcplaygroundpage/Contents.swift index e3db378..bc08c19 100644 --- a/Lab - Control Flow.playground/Pages/1. Exercise - Logical Operators.xcplaygroundpage/Contents.swift +++ b/Lab - Control Flow.playground/Pages/1. Exercise - Logical Operators.xcplaygroundpage/Contents.swift @@ -10,46 +10,46 @@ 1. `9 == 9` */ - - +print(true) +print(9 == 9) /*: 2. `9 != 9` */ - - +print(false) +print(9 != 9) /*: 3. `47 > 90` */ - - +print(false) +print( 47 > 90) /*: 4. `47 < 90` */ - - +print(true) +print(47 < 90) /*: 5. `4 <= 4` */ - - +print(true) +print(4 <= 4) /*: 6. `4 >= 5` */ - - +print(false) +print(4 >= 5) /*: 7. `(47 > 90) && (47 < 90)` */ - - +print(false) +print((47 > 90) && (47 < 90)) /*: 8. `(47 > 90) || (47 < 90)` */ - - +print(true) +print((47 > 90) || (47 < 90)) /*: 9. `!true` */ - - +print(false) +print(!true) //: page 1 of 9 | [Next: Exercise - If and If-Else Statements](@next) diff --git a/Lab - Control Flow.playground/Pages/2. Exercise - If and If-Else Statements.xcplaygroundpage/Contents.swift b/Lab - Control Flow.playground/Pages/2. Exercise - If and If-Else Statements.xcplaygroundpage/Contents.swift index 5bb5325..24b7f4e 100644 --- a/Lab - Control Flow.playground/Pages/2. Exercise - If and If-Else Statements.xcplaygroundpage/Contents.swift +++ b/Lab - Control Flow.playground/Pages/2. Exercise - If and If-Else Statements.xcplaygroundpage/Contents.swift @@ -4,18 +4,28 @@ Imagine you're creating a machine that will count your money for you and tell you how wealthy you are based on how much money you have. A variable `dollars` has been given to you with a value of 0. Write an if statement that prints "Sorry, kid. You're broke!" if `dollars` has a value of 0. Observe what is printed to the console. */ var dollars = 0 - - +if dollars == 0 { + print("Sorry, kid. You're broke!") +} /*: `dollars` has been updated below to have a value of 10. Write an an if-else statement that prints "Sorry, kid. You're broke!" if `dollars` has a value of 0, but prints "You've got some spending money!" otherwise. Observe what is printed to the console. */ dollars = 10 - - +if dollars == 0 { + print("Sorry, kid. You're broke!") +} else { + print("You've got some spending money!") +} /*: `dollars` has been updated below to have a value of 105. Write an an if-else-if statement that prints "Sorry, kid. You're broke!" if `dollars` has a value of 0, prints "You've got some spending money!" if `dollars` is less than 100, and prints "Looks to me like you're rich!" otherwise. Observe what is printed to the console. */ dollars = 105 - +if dollars == 0 { + print("Sorry, kid. You're broke!") +} else if dollars < 100 { + print("You've got some spending money!") +} else { + print("Looks to me like you're rich!") +} //: [Previous](@previous) | page 2 of 9 | [Next: App Exercise - Fitness Decisions](@next) diff --git a/Lab - Control Flow.playground/Pages/3. App Exercise - Fitness Decisions.xcplaygroundpage/Contents.swift b/Lab - Control Flow.playground/Pages/3. App Exercise - Fitness Decisions.xcplaygroundpage/Contents.swift index d0d23b3..72971e6 100644 --- a/Lab - Control Flow.playground/Pages/3. App Exercise - Fitness Decisions.xcplaygroundpage/Contents.swift +++ b/Lab - Control Flow.playground/Pages/3. App Exercise - Fitness Decisions.xcplaygroundpage/Contents.swift @@ -5,11 +5,21 @@ You want your fitness tracking app to give as much encouragement as possible to your users. Create a variable `steps` equal to the number of steps you guess you've taken today. Create a constant `stepGoal` equal to 10,000. Write an if-else statement that will print "You're almost halfway there!" if `steps` is less than half of `stepGoal`, and will print "You're over halfway there!" if `steps` is greater than half of `stepGoal`. */ - - +var steps = 967 //😥 +var stepGoal = 10_000 +if steps < stepGoal / 2 { + print("You're almost halfway there!") +} else { + print("You're over halfway there!") +} /*: Now create a new, but similar, if-else-if statement that prints "Way to get a good start today!" if `steps` is less than a tenth of `stepGoal`, prints "You're almost halfway there!" if `steps` is less than half of `stepGoal`, and prints "You're over halfway there!" if `steps` is greater than half of `stepGoal`. */ - - +if steps < stepGoal / 10 { + print("Way to get a good start today!") +} else if steps < stepGoal / 2 { + print("You're almost halfway there!") +} else { + print("You're over halfway there") +} //: [Previous](@previous) | page 3 of 9 | [Next: Exercise - Boolean Practice](@next) diff --git a/Lab - Control Flow.playground/Pages/4. Exercise - Boolean Practice.xcplaygroundpage/Contents.swift b/Lab - Control Flow.playground/Pages/4. Exercise - Boolean Practice.xcplaygroundpage/Contents.swift index 5db9740..9fcd8ad 100644 --- a/Lab - Control Flow.playground/Pages/4. Exercise - Boolean Practice.xcplaygroundpage/Contents.swift +++ b/Lab - Control Flow.playground/Pages/4. Exercise - Boolean Practice.xcplaygroundpage/Contents.swift @@ -13,7 +13,11 @@ let hasFish = true let hasPizza = false let hasVegan = true - +if (hasFish || hasPizza) && hasVegan { + print("Let's go!") +} else { + print("Sorry, we'll have to think of somewhere else.") +} /*: Imagine you're trying to decide whether or not to go on a walk. You decide that you'll go on a walk if it's not raining or if it's 82 degress or warmer and sunny out. Create a constant `isNiceWeather` that is equal to an expression that evaluates to a boolean indicating whether or not the weather is nice enough for you to go for a walk. Write an if statement that will print "I'm going for a walk!" if the weather is nice. */ @@ -21,5 +25,7 @@ let temp = 82 let isRaining = true let isSunny = true - +if !isRaining || (temp >= 82 && isSunny) { + print("I'm going for a walk!") +} //: [Previous](@previous) | page 4 of 9 | [Next: App Exercise - Target Heart Rate](@next) diff --git a/Lab - Control Flow.playground/Pages/5. App Exercise - Target Heart Rate.xcplaygroundpage/Contents.swift b/Lab - Control Flow.playground/Pages/5. App Exercise - Target Heart Rate.xcplaygroundpage/Contents.swift index 8740e75..c2585b2 100644 --- a/Lab - Control Flow.playground/Pages/5. App Exercise - Target Heart Rate.xcplaygroundpage/Contents.swift +++ b/Lab - Control Flow.playground/Pages/5. App Exercise - Target Heart Rate.xcplaygroundpage/Contents.swift @@ -11,5 +11,11 @@ let targetLowerBound = 120 let targetUpperBound = 150 let currentHR = 147 - +if currentHR < 120 { + print("You're doing great, but try to push it a bit!") +} else if currentHR >= targetLowerBound && currentHR <= targetUpperBound { + print("You're right on track!") +} else { + print("You're on fire! Slow it down just a bit.") +} //: [Previous](@previous) | page 5 of 9 | [Next: Exercise - Switch Statements](@next) diff --git a/Lab - Control Flow.playground/Pages/6. Switch Statements.xcplaygroundpage/Contents.swift b/Lab - Control Flow.playground/Pages/6. Switch Statements.xcplaygroundpage/Contents.swift index ed3e397..494f5dd 100644 --- a/Lab - Control Flow.playground/Pages/6. Switch Statements.xcplaygroundpage/Contents.swift +++ b/Lab - Control Flow.playground/Pages/6. Switch Statements.xcplaygroundpage/Contents.swift @@ -3,11 +3,25 @@ Imagine you're on a baseball team nearing the end of the season. Create a `leaguePosition` constant with a value of 1. Using a `switch` statement, print "Champions!" if the `leaguePosition` is 1, "Runners up" if the value is 2, "Third place" if the value is 3, and "Bad season!" in all other cases. */ +let leaguePosition = 1 - +switch leaguePosition { +case 1: + print("Champions!") +case 2: + print("Runners up") +case 3: + print("Third place") +default: + print("Bad season!") +} /*: Write a new `switch` statement that prints "Medal winner" if `leaguePosition` is within the range of 1-3. Otherwise, print "No medal awarded". */ - - +switch leaguePosition { +case 1...3: + print("Medal winner") +default: + print("No medal awarded") +} //: [Previous](@previous) | page 6 of 9 | [Next: App Exercise - Heart Rate Zones](@next) diff --git a/Lab - Control Flow.playground/Pages/7. App Exercise - Heart Rate Zones.xcplaygroundpage/Contents.swift b/Lab - Control Flow.playground/Pages/7. App Exercise - Heart Rate Zones.xcplaygroundpage/Contents.swift index 40f36d4..54ac4ac 100644 --- a/Lab - Control Flow.playground/Pages/7. App Exercise - Heart Rate Zones.xcplaygroundpage/Contents.swift +++ b/Lab - Control Flow.playground/Pages/7. App Exercise - Heart Rate Zones.xcplaygroundpage/Contents.swift @@ -17,5 +17,20 @@ */ let currentHR = 128 - +switch currentHR { +case ..<100: + print("Maybe, you are not in activity now") +case 100...120: + print("You are in the Very Light zone. Activity in this zone helps with recovery.") +case 121...140: + print("You are in the Light zone. Activity in this zone helps improve basic endurance and fat burning.") +case 141...160: + print("You are in the Moderate zone. Activity in this zone helps improve aerobic fitness.") +case 161...180: + print("You are in the Hard zone. Activity in this zone increases maximum performance capacity for shorter sessions.") +case 181...200: + print("You are in the Maximum zone. Activity in this zone helps fit athletes develop speed.") +default: + print("Dude ! Slow down !") +} //: [Previous](@previous) | page 7 of 9 | [Next: Exercise - Ternary Operator](@next) diff --git a/Lab - Control Flow.playground/Pages/8. Exercise - Ternary Operator.xcplaygroundpage/Contents.swift b/Lab - Control Flow.playground/Pages/8. Exercise - Ternary Operator.xcplaygroundpage/Contents.swift index 24cbb56..201f898 100644 --- a/Lab - Control Flow.playground/Pages/8. Exercise - Ternary Operator.xcplaygroundpage/Contents.swift +++ b/Lab - Control Flow.playground/Pages/8. Exercise - Ternary Operator.xcplaygroundpage/Contents.swift @@ -6,11 +6,11 @@ let number1 = 14 let number2 = 25 -var largest: Int -if number1 > number2 { - largest = number1 -} else { - largest = number2 -} - +//var largest: Int +//if number1 > number2 { +// largest = number1 +//} else { +// largest = number2 +//} +let largest = number1 > number2 ? number1 : number2 //: [Previous](@previous) | page 8 of 9 | [Next: App Exercise - Ternary Messages](@next) diff --git a/Lab - Control Flow.playground/Pages/9. App Exercise - Ternary Messages.xcplaygroundpage/Contents.swift b/Lab - Control Flow.playground/Pages/9. App Exercise - Ternary Messages.xcplaygroundpage/Contents.swift index 5c86dde..9f9a7cd 100644 --- a/Lab - Control Flow.playground/Pages/9. App Exercise - Ternary Messages.xcplaygroundpage/Contents.swift +++ b/Lab - Control Flow.playground/Pages/9. App Exercise - Ternary Messages.xcplaygroundpage/Contents.swift @@ -8,12 +8,12 @@ let stepGoal = 10000 let steps = 3948 -if steps < stepGoal / 2 { - print("Almost halfway!") -} else { - print("Over halfway!") -} - +//if steps < stepGoal / 2 { +// print("Almost halfway!") +//} else { +// print("Over halfway!") +//} +print(steps < stepGoal / 2 ? "Almost halfway!" : "Over halfway!") /*: diff --git a/Lab - Enumerations.playground/Pages/1. Exercise - Enumerations.xcplaygroundpage/Contents.swift b/Lab - Enumerations.playground/Pages/1. Exercise - Enumerations.xcplaygroundpage/Contents.swift index dc7d938..24f0199 100644 --- a/Lab - Enumerations.playground/Pages/1. Exercise - Enumerations.xcplaygroundpage/Contents.swift +++ b/Lab - Enumerations.playground/Pages/1. Exercise - Enumerations.xcplaygroundpage/Contents.swift @@ -3,31 +3,73 @@ Define a `Suit` enum with four possible cases: `clubs`, `spades`, `diamonds`, and `hearts`. */ - - +enum Suit { + case clubs + case spades + case diamonds + case hearts +} /*: Imagine you are being shown a card trick and have to draw a card and remember the suit. Create a variable instance of `Suit` called `cardInHand` and assign it to the `hearts` case. Print out the instance. */ - - +var cardInHand = Suit.hearts +print(cardInHand) /*: Now imagine you have to put back the card you drew and draw a different card. Update the variable to be a spade instead of a heart. */ - - +cardInHand = .spades /*: Imagine you are writing an app that will display a fun fortune (i.e. something like "You will soon find what you seek.") based on cards drawn. Write a function called `getFortune(cardSuit:)` that takes a parameter of type `Suit`. Inside the body of the function, write a switch statement based on the value of `cardSuit`. Print a different fortune for each `Suit` value. Call the function a few times, passing in different values for `cardSuit` each time. */ +func getFortune(cardSuit: Suit) { + switch cardSuit { + case .clubs: + print("♣️") + case .spades: + print("♠️") + case .diamonds: + print("♦️") + case .hearts: + print("❤️") + } +} - +getFortune(cardSuit: .hearts) +getFortune(cardSuit: .spades) +getFortune(cardSuit: .clubs) +getFortune(cardSuit: .diamonds) /*: Create a `Card` struct below. It should have two properties, one for `suit` of type `Suit` and another for `value` of type `Int`. */ - - +struct Card { + enum Value { + case ace + case two + case three + case four + case five + case six + case seven + case eight + case nine + case ten + case jack + case queen + case king + } + + var suit: Suit + var value: Value +} /*: How many values can playing cards have? How many values can `Int` be? It would be safer to have an enum for the card's value as well. Inside the struct above, create an enum for `Value`. It should have cases for `ace`, `two`, `three`, `four`, `five`, `six`, `seven`, `eight`, `nine`, `ten`, `jack`, `queen`, `king`. Change the type of `value` from `Int` to `Value`. Initialize two `Card` objects and print a statement for each that details the card's value and suit. */ - +/*: + How many values can playing cards have? How many values can `Int` be? It would be safer to have an enum for the card's value as well. Inside the struct above, create an enum for `Value`. It should have cases for `ace`, `two`, `three`, `four`, `five`, `six`, `seven`, `eight`, `nine`, `ten`, `jack`, `queen`, `king`. Change the type of `value` from `Int` to `Value`. Initialize two `Card` objects and print a statement for each that details the card's value and suit. + */ +let aceOfSpade = Card(suit: .spades, value: .ace) +let kingOfDiamonds = Card(suit: .diamonds, value: .king) +print("\(aceOfSpade.value) of \(aceOfSpade.suit)") +print("\(kingOfDiamonds.value) of \(kingOfDiamonds.suit)") //: page 1 of 2 | [Next: App Exercise - Swimming Workouts](@next) diff --git a/Lab - Enumerations.playground/Pages/2. App Exercise - Swimming Workouts.xcplaygroundpage/Contents.swift b/Lab - Enumerations.playground/Pages/2. App Exercise - Swimming Workouts.xcplaygroundpage/Contents.swift index de34f32..de7bece 100644 --- a/Lab - Enumerations.playground/Pages/2. App Exercise - Swimming Workouts.xcplaygroundpage/Contents.swift +++ b/Lab - Enumerations.playground/Pages/2. App Exercise - Swimming Workouts.xcplaygroundpage/Contents.swift @@ -5,13 +5,41 @@ Previous app exercises have introduced the idea that your fitness tracking app may allow users to track swimming workouts. Create a `SwimmingWorkout` struct below with properties for `distance`, `time`, and `stroke`. `distance` and `time` should be of type `Double` and will represent distance in meters and time in seconds, and `stroke` should be of type `String`. */ +struct SwimmingWorkout { + enum Stroke { + case freestyle + case butterfly + case backstroke + case breaststroke + } + static var freestyleWorkouts: [SwimmingWorkout] = [] + static var butterflyWorkouts: [SwimmingWorkout] = [] + static var backstrokeWorkouts: [SwimmingWorkout] = [] + static var breaststrokeWorkouts: [SwimmingWorkout] = [] + var distance: Double + var time: Double + var stroke: Stroke + + func save() { + switch stroke { + case .freestyle: + SwimmingWorkout.freestyleWorkouts.append(self) + case .butterfly: + SwimmingWorkout.butterflyWorkouts.append(self) + case .backstroke: + SwimmingWorkout.backstrokeWorkouts.append(self) + case .breaststroke: + SwimmingWorkout.breaststrokeWorkouts.append(self) + } + } +} /*: Allowing `stroke` to be of type `String` isn't very type-safe. Inside the `SwimmingWorkout` struct, create an enum called `Stroke` that has cases for `freestyle`, `butterfly`, `backstroke`, and `breaststroke`. Change the type of `stroke` from `String` to `Stroke`. Create two instances of `SwimmingWorkout` objects. */ - - +let backstrokeSwim = SwimmingWorkout(distance: 500, time: 3000, stroke: .backstroke) +let breaststrokeSwim = SwimmingWorkout(distance: 500, time: 3400, stroke: .breaststroke) /*: Now imagine you want to log swimming workouts separately based on the swimming stroke. You might use arrays as static variables on `SwimmingWorkout` for this. Add four static variables, `freestyleWorkouts`, `butterflyWorkouts`, `backstrokeWorkouts`, and `breaststrokeWorkouts`, to `SwimmingWorkout` above. Each should be of type `[SwimmingWorkout]` and should default to empty arrays. */ @@ -20,8 +48,10 @@ /*: Now add an instance method to `SwimmingWorkout` called `save()` that takes no parameters and has no return value. This method will add its instance to the static array on `SwimmingWorkout` that corresponds to its swimming stroke. Inside `save()` write a switch statement that switches on the instance's `stroke` property, and appends `self` to the proper array. Call save on the two instances of `SwimmingWorkout` that you created above, and then print the array(s) to which they should have been added to see if your `save` method works properly. */ - - +backstrokeSwim.save() +breaststrokeSwim.save() +print(SwimmingWorkout.freestyleWorkouts) +print(SwimmingWorkout.butterflyWorkouts) /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Functions.playground/Pages/1. Exercise - Create Functions.xcplaygroundpage/Contents.swift b/Lab - Functions.playground/Pages/1. Exercise - Create Functions.xcplaygroundpage/Contents.swift index 37d509b..cd07290 100644 --- a/Lab - Functions.playground/Pages/1. Exercise - Create Functions.xcplaygroundpage/Contents.swift +++ b/Lab - Functions.playground/Pages/1. Exercise - Create Functions.xcplaygroundpage/Contents.swift @@ -3,11 +3,36 @@ Write a function called `introduceMyself` that prints a brief introduction of yourself. Call the function and observe the printout. */ +func introduceMyself() { + print("Hi! My name is Yannis.") +} +introduceMyself() /*: Write a function called `magicEightBall` that generates a random number and then uses either a switch statement or if-else-if statements to print different responses based on the random number generated. `let randomNum = Int.random(in: 0...4)` will generate a random number from 0 to 4, after which you can print different phrases corresponding to the number generated. Call the function multiple times and observe the different printouts. */ +func magicEightBall() { + let randomNum = Int.random(in: 0...4) + switch randomNum { + case 0: + print("For sure") + case 1: + print("I'm not so magic") + case 2: + print("Nope...") + case 3: + print("Maybe") + default: + print("No idea") + } +} +magicEightBall() +magicEightBall() +magicEightBall() +magicEightBall() +magicEightBall() +magicEightBall() //: page 1 of 6 | [Next: App Exercise - A Functioning App](@next) diff --git a/Lab - Functions.playground/Pages/2. App Exercise - A Functioning App.xcplaygroundpage/Contents.swift b/Lab - Functions.playground/Pages/2. App Exercise - A Functioning App.xcplaygroundpage/Contents.swift index 17808ef..0f4218b 100644 --- a/Lab - Functions.playground/Pages/2. App Exercise - A Functioning App.xcplaygroundpage/Contents.swift +++ b/Lab - Functions.playground/Pages/2. App Exercise - A Functioning App.xcplaygroundpage/Contents.swift @@ -9,11 +9,38 @@ */ var steps = 0 +func incrementSteps() { + steps += 1 + print(steps) +} +incrementSteps() +incrementSteps() +incrementSteps() +incrementSteps() +incrementSteps() +incrementSteps() /*: Similarly, if you want to regularly provide progress updates to your user, you can put your control flow statements that check on progress into a function. Write a function called `progressUpdate` after the declaration of `goal` below. The function should print "You're off to a good start." if `steps` is less than 10% of `goal`, "You're almost halfway there!" if `steps` is less than half of `goal`, "You're over halfway there!" if `steps` is less than 90% of `goal`, "You're almost there!" if `steps` is less than `goal`, and "You beat your goal!" otherwise. Call the function and observe the printout. Remember, you can convert numbers using the appropriate Int or Double initializer. */ let goal = 10000 +func progressUpdate() { + let percent = Double(steps)/Double(goal) + + + if percent < 0.1 { + print("You're off to a good start.") + } else if percent < 0.5 { + print("You're almost halfway there!") + } else if percent < 0.9 { + print("You're over halfway there!") + } else if steps < goal { + print("You're almost there!") + } else { + print("You beat your goal!") + } +} +progressUpdate() //: [Previous](@previous) | page 2 of 6 | [Next: Exercise - Parameters and Argument Labels](@next) diff --git a/Lab - Functions.playground/Pages/3. Exercise - Parameters and Argument Labels.xcplaygroundpage/Contents.swift b/Lab - Functions.playground/Pages/3. Exercise - Parameters and Argument Labels.xcplaygroundpage/Contents.swift index 33158a5..433401a 100644 --- a/Lab - Functions.playground/Pages/3. Exercise - Parameters and Argument Labels.xcplaygroundpage/Contents.swift +++ b/Lab - Functions.playground/Pages/3. Exercise - Parameters and Argument Labels.xcplaygroundpage/Contents.swift @@ -3,16 +3,25 @@ Write a new introduction function called `introduction`. It should take two `String` parameters, `name` and `home`, and one `Int` parameter, `age`. The function should print a brief introduction. I.e. if "Mary," "California," and 32 were passed into the function, it might print "Mary, 32, is from California." Call the function and observe the printout. */ +func introduction(name: String, home: String, age: Int) { + print("\(name), \(age), is from \(home).") +} - +introduction(name: "Mary", home: "California", age: 32) /*: Write a function called `almostAddition` that takes two `Int` arguments. The first argument should not require an argument label. The function should add the two arguments together, subtract 2, then print the result. Call the function and observe the printout. */ +func almostAddition(_ firstNumber: Int, secondNumber: Int) { + print(firstNumber + secondNumber - 2) +} - +almostAddition(3, secondNumber: 13) /*: Write a function called `multiply` that takes two `Double` arguments. The function should multiply the two arguments and print the result. The first argument should not require a label, and the second argument should have an external label, "by", that differs from the internal label. Call the function and observe the printout. */ +func multiply(_ firstNumber: Double, by secondNumber: Double) { + print(firstNumber*secondNumber) +} - +multiply(12.1, by: 12.5) //: [Previous](@previous) | page 3 of 6 | [Next: App Exercise - Progress Updates](@next) diff --git a/Lab - Functions.playground/Pages/4. App Exercise - Progress Updates.xcplaygroundpage/Contents.swift b/Lab - Functions.playground/Pages/4. App Exercise - Progress Updates.xcplaygroundpage/Contents.swift index 29d57f3..acf852b 100644 --- a/Lab - Functions.playground/Pages/4. App Exercise - Progress Updates.xcplaygroundpage/Contents.swift +++ b/Lab - Functions.playground/Pages/4. App Exercise - Progress Updates.xcplaygroundpage/Contents.swift @@ -9,11 +9,40 @@ Call the function a number of times, passing in different values of `steps` and `goal`. Observe the printouts and make sure what is printed to the console is what you would expect for the parameters passsed in. */ +func progressUpdate(steps: Int, goal: Int) { + let percent = Double(steps)/Double(goal) + + if percent < 0.1 { + print("You're off to a good start.") + } else if percent < 0.5 { + print("You're almost halfway there!") + } else if percent < 0.9 { + print("You're over halfway there!") + } else if steps < goal { + print("You're almost there!") + } else { + print("You beat your goal!") + } +} - +progressUpdate(steps: 0, goal: 10) +progressUpdate(steps: 2, goal: 10) +progressUpdate(steps: 5, goal: 10) +progressUpdate(steps: 8, goal: 10) +progressUpdate(steps: 10, goal: 10) /*: Your fitness tracking app is going to help runners stay on pace to reach their goals. Write a function called pacing that takes four `Double` parameters called `currentDistance`, `totalDistance`, `currentTime`, and `goalTime`. Your function should calculate whether or not the user is on pace to hit or beat `goalTime`. If yes, print "Keep it up!", otherwise print "You've got to push it just a bit harder!" */ +func pacing(currentDistance: Double, totalDistance: Double, currentTime: Double, goalTime: Double) { + let pace = currentTime/(currentDistance/totalDistance) + + if pace < goalTime { + print("Keep it up!") + } else { + print("You've got to push it just a bit harder!") + } +} - +pacing(currentDistance: 123, totalDistance: 322, currentTime: 23.5, goalTime: 75.3) +pacing(currentDistance: 10, totalDistance: 322, currentTime: 23.5, goalTime: 75.3) //: [Previous](@previous) | page 4 of 6 | [Next: Exercise - Return Values](@next) diff --git a/Lab - Functions.playground/Pages/5. Exercise - Return Values.xcplaygroundpage/Contents.swift b/Lab - Functions.playground/Pages/5. Exercise - Return Values.xcplaygroundpage/Contents.swift index 2cdc442..667f4ca 100644 --- a/Lab - Functions.playground/Pages/5. Exercise - Return Values.xcplaygroundpage/Contents.swift +++ b/Lab - Functions.playground/Pages/5. Exercise - Return Values.xcplaygroundpage/Contents.swift @@ -3,11 +3,19 @@ Write a function called `greeting` that takes a `String` argument called name, and returns a `String` that greets the name that was passed into the function. I.e. if you pass in "Dan" the return value might be "Hi, Dan! How are you?" Use the function and print the result. */ +func greeting(name: String) -> String { + return "Hi, \(name)! How are you?" +} - +print(greeting(name: "Yannis")) /*: Write a function that takes two `Int` arguments, and returns an `Int`. The function should multiply the two arguments, add 2, then return the result. Use the function and print the result. */ +func almostMultiplication(firstNumber: Int, secondNumber: Int) -> Int { + firstNumber * secondNumber + 2 +} +let result = almostMultiplication(firstNumber: 23, secondNumber: 13) +print(result) //: [Previous](@previous) | page 5 of 6 | [Next: App Exercise - Separating Functions](@next) diff --git a/Lab - Functions.playground/Pages/6. App Exercise - Separating Functions.xcplaygroundpage/Contents.swift b/Lab - Functions.playground/Pages/6. App Exercise - Separating Functions.xcplaygroundpage/Contents.swift index 76dc16a..6057187 100644 --- a/Lab - Functions.playground/Pages/6. App Exercise - Separating Functions.xcplaygroundpage/Contents.swift +++ b/Lab - Functions.playground/Pages/6. App Exercise - Separating Functions.xcplaygroundpage/Contents.swift @@ -7,12 +7,27 @@ As an example, write a function that only does a portion of what your previous `pacing` function did. This function will be called `calculatePace`. It should take three `Double` arguments called `currentDistance`, `totalDistance`, and `currentTime`, and should return a `Double` that will represent the time at which the user will finish the run based on the user's current distance and time. call the function and print the return value. */ +func calculatePace(currentDistance: Double, totalDistance: Double, currentTime: Double) -> Double { + return currentTime/(currentDistance/totalDistance) +} - +let pace = calculatePace(currentDistance: 110, totalDistance: 1100, currentTime: 62) +print(pace) /*: Now write a function called `pacing` that takes four `Double` arguments called `currentDistance`, `totalDistance`, `currentTime`, and `goalTime`. The function should also return a `String`, which will be the message to show the user. The function should call `calculatePace`, passing in the appropriate values, and capture the return value. The function should then compare the returned value to `goalTime` and if the user is on pace return "Keep it up!", and return "You've got to push it just a bit harder!" otherwise. Call the function and print the return value. */ - +func pacing(currentDistance: Double, totalDistance: Double, currentTime: Double, goalTime: Double) -> String { + let pace = calculatePace(currentDistance: currentDistance, totalDistance: totalDistance, currentTime: currentTime) + + if pace <= goalTime { + return "Keep it up!" + } else { + return "You've got to push it just a bit harder!" + } +} + +let motivation = pacing(currentDistance: 110, totalDistance: 1100, currentTime: 65.8, goalTime: 540) +print(motivation) /*: diff --git a/Lab - Guard.playground/Pages/1. Exercise - Guard Statements.xcplaygroundpage/Contents.swift b/Lab - Guard.playground/Pages/1. Exercise - Guard Statements.xcplaygroundpage/Contents.swift index f851c0a..659a975 100644 --- a/Lab - Guard.playground/Pages/1. Exercise - Guard Statements.xcplaygroundpage/Contents.swift +++ b/Lab - Guard.playground/Pages/1. Exercise - Guard Statements.xcplaygroundpage/Contents.swift @@ -4,13 +4,29 @@ import UIKit Imagine you want to write a function to calculate the area of a rectangle. However, if you pass a negative number into the function, you don't want it to calculate a negative area. Create a function called `calculateArea` that takes two `Double` parameters, `x` and `y`, and returns an optional `Double`. Write a guard statement at the beginning of the function that verifies each of the parameters is greater than zero and returns `nil` if not. When the guard has succeeded, calculate the area by multiplying `x` and `y` together, then return the area. Call the function once with positive numbers and once with at least one negative number. */ +func calculateArea(x: Double, y: Double) -> Double? { + guard x > 0 && y > 0 else { return nil } + return x * y +} + +calculateArea(x: 3, y: 122) +calculateArea(x: -44, y: 122) /*: Create a function called `add` that takes two optional integers as parameters and returns an optional integer. You should use one `guard` statement to unwrap both optional parameters, returning `nil` in the `guard` body if one or both of the parameters doesn't have a value. If both parameters can successfully be unwrapped, return their sum. Call the function once with non-`nil` numbers and once with at least one parameter being `nil`. */ +func add(x: Int?, y: Int?) -> Int? { + guard let x = x, + let y = y else { + return nil + } + return x + y +} +add(x: 3, y: 3) +add(x: nil, y: 7) /*: When working with UIKit objects, you will occasionally need to unwrap optionals to handle user input. For example, the text fields initialized below have `text` properties that are of type `String?`. @@ -30,10 +46,20 @@ firstNameTextField.text = "Jonathan" lastNameTextField.text = "Sanders" ageTextField.text = "28" - +func createUser() -> User? { + guard let firstName = firstNameTextField.text, + let lastName = lastNameTextField.text, + let age = ageTextField.text else { + return nil + } + return User(firstName: firstName, lastName: lastName, age: age) +} /*: Call the function you made above and capture the return value. Unwrap the `User` with standard optional binding and print a statement using each of its properties. */ - +let newUser = createUser() +if let user = newUser { + print("new user : \(user.firstName) \(user.lastName) \(user.age).") +} //: page 1 of 2 | [Next: App Exercise - Guard](@next) diff --git a/Lab - Guard.playground/Pages/2. App Exercise - Guard.xcplaygroundpage/Contents.swift b/Lab - Guard.playground/Pages/2. App Exercise - Guard.xcplaygroundpage/Contents.swift index 4fea0bf..9c4e0fb 100644 --- a/Lab - Guard.playground/Pages/2. App Exercise - Guard.xcplaygroundpage/Contents.swift +++ b/Lab - Guard.playground/Pages/2. App Exercise - Guard.xcplaygroundpage/Contents.swift @@ -10,8 +10,17 @@ import UIKit Write a failable initializer that takes parameters for your start and end times, and then checks to see if they are greater than 10 seconds apart using a guard statement. If they are, your initializer should fail. Otherwise, the initializer should set the properties accordingly. */ +struct Workout { + var startTime: Double + var endTime: Double + init?(startTime: Double, endTime: Double) { + guard endTime - startTime > 10 else { return nil } + self.startTime = startTime + self.endTime = endTime + } +} /*: Imagine a screen where a user inputs a meal that they've eaten. If the user taps a "save" button without adding any food, you might want to prompt the user that they haven't actually added anything. @@ -28,12 +37,22 @@ let caloriesTextField = UITextField() foodTextField.text = "Banana" caloriesTextField.text = "23" +func logFood() -> Food? { + guard let foodName = foodTextField.text, + let caloriesText = caloriesTextField.text, + let calories = Int(caloriesText) else { + return nil + } + return Food(name: foodName, calories: calories) +} /*: Call the function you made above and capture the return value. Unwrap the `Food` object with standard optional binding and print a statement about the food using each of its properties. Go back and change the text in `caloriesTextField` to a string that cannot be converted into a number. What happens in that case? */ - - +if let food = logFood() { + print("\(food.name) -> \(food.calories) calories.") +} +//if caloriesTextField is string that cannot be converted into a number we can't create food object so nothing append /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Introduction.playground/Pages/1. Exercise - Use Playgrounds.xcplaygroundpage/Contents.swift b/Lab - Introduction.playground/Pages/1. Exercise - Use Playgrounds.xcplaygroundpage/Contents.swift index cd86d9d..c2c3d27 100644 --- a/Lab - Introduction.playground/Pages/1. Exercise - Use Playgrounds.xcplaygroundpage/Contents.swift +++ b/Lab - Introduction.playground/Pages/1. Exercise - Use Playgrounds.xcplaygroundpage/Contents.swift @@ -10,14 +10,15 @@ print("How to use playgrounds to make writing Swift fun and simple") /*: Now print your own phrases to the console. Pick one of your favorite songs. Use your knowledge of the `print` function to display the song title and artist. */ - +print("Some song title of some artist") /*: Use multiple `print` functions to write out some of the lyrics to the song. */ - - - +print("Some lyrics") +print("Some lyrics") +print("Some lyrics") +print("Some lyrics") /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Loops.playground/Pages/1. Exercise - For-In Loops.xcplaygroundpage/Contents.swift b/Lab - Loops.playground/Pages/1. Exercise - For-In Loops.xcplaygroundpage/Contents.swift index a019d00..1cf4377 100644 --- a/Lab - Loops.playground/Pages/1. Exercise - For-In Loops.xcplaygroundpage/Contents.swift +++ b/Lab - Loops.playground/Pages/1. Exercise - For-In Loops.xcplaygroundpage/Contents.swift @@ -3,17 +3,23 @@ Create a for-in loop that loops through values 1 to 100, and prints each of the values. */ - - +for index in 1...100 { + print(index) +} /*: Create a for-in loop that loops through each of the characters in the `alphabet` string below, and prints each of the values alongside the index. */ let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - +for (index, letter) in alphabet.enumerated() { + print("\(index): \(letter)") +} /*: Create a `[String: String]` dictionary, where the keys are names of states and the values are their capitals. Include at least three key/value pairs in your collection, then use a for-in loop to iterate over the pairs and print out the keys and values in a sentence. */ +let capitalsOfStates: [String: String] = [" Alabama": "Montgomery", "Alaska": "Juneau", "Arizona": "Phoenix"] - +for (state, capital) in capitalsOfStates { + print("Capital of \(state) is \(capital)") +} //: page 1 of 6 | [Next: App Exercise - Movements](@next) diff --git a/Lab - Loops.playground/Pages/2. App Exercise - Movements.xcplaygroundpage/Contents.swift b/Lab - Loops.playground/Pages/2. App Exercise - Movements.xcplaygroundpage/Contents.swift index 20d0853..3141aac 100644 --- a/Lab - Loops.playground/Pages/2. App Exercise - Movements.xcplaygroundpage/Contents.swift +++ b/Lab - Loops.playground/Pages/2. App Exercise - Movements.xcplaygroundpage/Contents.swift @@ -6,12 +6,14 @@ Suppose your app contains a list of different movements that can be tracked. You want to display each item in the list to the user. Use a for-in loop to loop through `movements` below and print each movement. */ let movements: [String] = ["Walking", "Running", "Swimming", "Cycling", "Skiing", "Climbing"] - - +for movement in movements { + print(movement) +} /*: Now suppose your app uses a dictionary to keep track of your average heart rate during each of the movements in `movements`. The keys correspond to the movements listed above, and the values correspond to the average heart rate that your fitness tracker has monitored during the given movement. Loop through `movementHeartRates` below, printing statements telling the user his/her average heart rate during each exercise. */ var movementHeartRates: [String: Int] = ["Walking": 85, "Running": 120, "Swimming": 130, "Cycling": 128, "Skiing": 114, "Climbing": 129] - - +for (movement, heartRate) in movementHeartRates { + print("Average heart rate for \(movement) is \(heartRate)") +} //: [Previous](@previous) | page 2 of 6 | [Next: Exercise - While Loops](@next) diff --git a/Lab - Loops.playground/Pages/3. Exercise - While Loops.xcplaygroundpage/Contents.swift b/Lab - Loops.playground/Pages/3. Exercise - While Loops.xcplaygroundpage/Contents.swift index e03b910..2904ff0 100644 --- a/Lab - Loops.playground/Pages/3. Exercise - While Loops.xcplaygroundpage/Contents.swift +++ b/Lab - Loops.playground/Pages/3. Exercise - While Loops.xcplaygroundpage/Contents.swift @@ -4,6 +4,11 @@ import Foundation Create a while loop that simulates rolling a 6-sided dice repeatedly until a 1 is rolled. After each roll, print the value. (Hint: use `Int.random(in: 1...6)` to generate a random number between 1 and 6). */ +var roll = 0 +while roll != 1 { + roll = Int.random(in: 1...6) + print(roll) +} //: [Previous](@previous) | page 3 of 6 | [Next: App Exercise - While Loops](@next) diff --git a/Lab - Loops.playground/Pages/4. App Exercise - Running Cadence.xcplaygroundpage/Contents.swift b/Lab - Loops.playground/Pages/4. App Exercise - Running Cadence.xcplaygroundpage/Contents.swift index 120197b..a8107ca 100644 --- a/Lab - Loops.playground/Pages/4. App Exercise - Running Cadence.xcplaygroundpage/Contents.swift +++ b/Lab - Loops.playground/Pages/4. App Exercise - Running Cadence.xcplaygroundpage/Contents.swift @@ -11,11 +11,19 @@ import Foundation let cadence: Double = 180 var testSteps = 0 - +while testSteps < 10 { + print("Take a step") + testSteps += 1 + Thread.sleep(forTimeInterval: 60 / cadence) +} /*: Recreate the above cadence example using a repeat-while loop. */ testSteps = 0 - +repeat { + print("Take a step") + testSteps += 1 + Thread.sleep(forTimeInterval: 60 / cadence) +} while testSteps < 10 //: [Previous](@previous) | page 4 of 6 | [Next: Exercise - Control Transfer Statements](@next) diff --git a/Lab - Loops.playground/Pages/5. Exercise - Control Transfer Statements.xcplaygroundpage/Contents.swift b/Lab - Loops.playground/Pages/5. Exercise - Control Transfer Statements.xcplaygroundpage/Contents.swift index 2ece88a..67f3b88 100644 --- a/Lab - Loops.playground/Pages/5. Exercise - Control Transfer Statements.xcplaygroundpage/Contents.swift +++ b/Lab - Loops.playground/Pages/5. Exercise - Control Transfer Statements.xcplaygroundpage/Contents.swift @@ -4,11 +4,22 @@ Create a for-in loop that will loop through `alphabet`. Inside the loop, print every other letter by continuing to the next iteration if you are on a letter you do not wish to print. (Hint: You can use the `isMultiple(of:)` method on `Int` to only print even indexed characters). */ let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - +for (index, letter) in alphabet.enumerated() { + if !index.isMultiple(of: 2) { + print("\(index): \(letter)") + } +} + /*: Create a `[String: String]` dictionary where the keys are names of states and the values are their capitals. Include at least three key/value pairs in your collection, with one of them being your home state. Now loop through this dictionary again, printing out the keys and values in a sentence, but add an if statement that will check if the current iteration is your home state. If it is, print("I found my home!") and break out of the loop. */ - +let capitalsOfStates: [String: String] = ["Alabama": "Montgomery", "Alaska": "Juneau", "Arizona": "Phoenix"] +for (state, capital) in capitalsOfStates { + if state == "Alabama" { + print("Capital of home state \(state) is \(capital)") + break + } +} //: [Previous](@previous) | page 5 of 6 | [Next: App Exercise - Finding Movements](@next) diff --git a/Lab - Loops.playground/Pages/6. App Exercise - Finding Movements.xcplaygroundpage/Contents.swift b/Lab - Loops.playground/Pages/6. App Exercise - Finding Movements.xcplaygroundpage/Contents.swift index 1649e6d..e5ac7dc 100644 --- a/Lab - Loops.playground/Pages/6. App Exercise - Finding Movements.xcplaygroundpage/Contents.swift +++ b/Lab - Loops.playground/Pages/6. App Exercise - Finding Movements.xcplaygroundpage/Contents.swift @@ -12,7 +12,11 @@ let lowHR = 110 let highHR = 125 var movementHeartRates: [String: Int] = ["Walking": 85, "Running": 120, "Swimming": 130, "Cycling": 128, "Skiing": 114, "Climbing": 129] - +for (movement, heartRate) in movementHeartRates { + if !(heartRate < lowHR || heartRate > highHR) { + print("You could go \(movement).") + } + } /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Operators.playground/Pages/1. Exercise - Basic Arithmetic.xcplaygroundpage/Contents.swift b/Lab - Operators.playground/Pages/1. Exercise - Basic Arithmetic.xcplaygroundpage/Contents.swift index 8c68750..e70e309 100644 --- a/Lab - Operators.playground/Pages/1. Exercise - Basic Arithmetic.xcplaygroundpage/Contents.swift +++ b/Lab - Operators.playground/Pages/1. Exercise - Basic Arithmetic.xcplaygroundpage/Contents.swift @@ -3,28 +3,37 @@ You decide to build a shed and want to know beforehand the area of your yard that it will take up. Create two constants, `width` and `height`, with values of 10 and 20, respectively. Create an `area` constant that is the result of multiplying the two previous constants together, and print out the result. */ - +let width = 10 +let height = 20 +let area = width * height +print(area) /*: You decide that you'll divide your shed into two rooms. You want to know if dividing it equally will leave enough room for some of your larger storage items. Create a `roomArea` constant that is the result of dividing `area` in half. Print out the result. */ - +let roomArea = area / 2 +print(roomArea) /*: Create a `perimeter` constant whose value equals `width` plus `width` plus `height` plus `height`, then print out the result. */ - - +let perimeter = width * 2 + height * 2 +print(perimeter) /*: Print what you would expect the result of integer division of 10 divided by 3 to be. Create a constant, `integerDivisionResult` that is the result of 10 divided by 3, and print the value. */ - +print(3) +let integerDivisionResult = 10 / 3 +print(integerDivisionResult) /*: Now create two constants, `double10` and `double3`, set to 10 and 3, and declare their types as `Double` values. Declare a final constant `divisionResult` equal to the result of `double10` divided by `double3`. Print the value of `divisionResult`. How does this differ from the value when using integer division? */ - - +let double10: Double = 10 +let double3: Double = 3 +let divisionResult = double10 / double3 +print(divisionResult) +//We use double so result is double, that's why result got decimal /*: Given the value pi (3.1415927), create a `radius` constant with a value of 5.0, then calculate the diameter and circumference of the circle using the following equations, and print the results: @@ -33,16 +42,24 @@ *circumference = 2 * pi * radius.* */ let pi = 3.1415927 - +let radius = 5.0 +let diameter = 2 * radius +let circumference = 2 * pi * radius +print(diameter) +print(circumference) /*: Create an integer constant. Using the remainder operator, set its value to the remainder of 12 divided by 5. */ - +let remainder = 12 % 5 /*: Create two integer constants, `even` and `odd` and set them to any even integer and any odd integer, respectively. For each, print the remainder of dividing the value by 2. Looking at the results, how do you think you could use the remainder operator to determine if an integer is even or odd? */ - +let even = 2 +let odd = 1 +print(even % 2) +print(odd % 2) +//if number remainder of dividing value of 2 is 0, we can say that the number is even (because this number is multiple of 2 : It's mathematic 🙂) //: page 1 of 8 | [Next: App Exercise - Fitness Calculations](@next) diff --git a/Lab - Operators.playground/Pages/2. App Exercise - Fitness Calculations.xcplaygroundpage/Contents.swift b/Lab - Operators.playground/Pages/2. App Exercise - Fitness Calculations.xcplaygroundpage/Contents.swift index 7384367..8189834 100644 --- a/Lab - Operators.playground/Pages/2. App Exercise - Fitness Calculations.xcplaygroundpage/Contents.swift +++ b/Lab - Operators.playground/Pages/2. App Exercise - Fitness Calculations.xcplaygroundpage/Contents.swift @@ -5,16 +5,28 @@ Your fitness tracker keeps track of users' heart rate, but you might also want to display their average heart rate over the last hour. Create three constants, `heartRate1`, `heartRate2`, and `heartRate3`. Give each constant a different value between 60 and 100. Create a constant `addedHR` equal to the sum of all three heart rates. Now create a constant called `averageHR` that equals `addedHR` divided by 3 to get the average. Print the result. */ - +let heartRate1 = 60 +let heartRate2 = 79 +let heartRate3 = 100 +let addedHR = heartRate1 + heartRate2 + heartRate3 +let averageHR = addedHR / 3 +print(averageHR) /*: Now create three more constants, `heartRate1D`, `heartRate2D`, and `heartRate3D`, equal to the same values as `heartRate1`, `heartRate2`, and `heartRate3`. These new constants should be of type `Double`. Create a constant `addedHRD` equal to the sum of all three heart rates. Create a constant called `averageHRD` that equals the `addedHRD` divided by 3 to get the average of your new heart rate constants. Print the result. Does this differ from your previous average? Why or why not? */ - - +let heartRate1D: Double = 60 +let heartRate2D: Double = 79 +let heartRate3D: Double = 100 +let addedHRD = heartRate1D + heartRate2D + heartRate3D +let averageHRD = addedHRD / 3 +print(averageHRD) +//we use double, so we've got preciser result (with decimal) /*: Imagine that partway through the day a user has taken 3,467 steps out of the 10,000 step goal. Create constants `steps` and `goal`. Both will need to be of type `Double` so that you can perform accurate calculations. `steps` should be assigned the value 3,467, and `goal` should be assigned 10,000. Create a constant `percentOfGoal` that equals an expression that evaluates to the percent of the goal that has been achieved so far. */ - +let steps: Double = 3_467 +let goal: Double = 10_000 +let percentOfGoal = steps / goal * 100 //: [Previous](@previous) | page 2 of 8 | [Next: Exercise - Compound Assignment](@next) diff --git a/Lab - Operators.playground/Pages/3. Exercise - Compound Assignment.xcplaygroundpage/Contents.swift b/Lab - Operators.playground/Pages/3. Exercise - Compound Assignment.xcplaygroundpage/Contents.swift index b0c97b5..8a8cc27 100644 --- a/Lab - Operators.playground/Pages/3. Exercise - Compound Assignment.xcplaygroundpage/Contents.swift +++ b/Lab - Operators.playground/Pages/3. Exercise - Compound Assignment.xcplaygroundpage/Contents.swift @@ -3,7 +3,12 @@ Declare a variable whose value begins at 10. Using addition, update the value to 15 using the compound assignment operator. Using multiplication, update the value to 30 using compound assignment. Print out the variable's value after each assignment. */ - +var start = 10 +print(start) +start += 5 +print(start) +start *= 2 +print(start) /*: Create a variable called `piggyBank` that begins at 0. You will use this to keep track of money you earn and spend. For each point below, use the right compound assignment operator to update the balance in your piggy bank. @@ -16,9 +21,16 @@ Print the balance of your piggy bank after each step. */ - - - - - +var piggyBank = 0 +print(piggyBank) +piggyBank += 10 +print(piggyBank) +piggyBank += 20 +print(piggyBank) +piggyBank /= 2 +print(piggyBank) +piggyBank *= 3 +print(piggyBank) +piggyBank -= 3 +print(piggyBank) //: [Previous](@previous) | page 3 of 8 | [Next: App Exercise - Counting](@next) diff --git a/Lab - Operators.playground/Pages/4. App Exercise - Counting.xcplaygroundpage/Contents.swift b/Lab - Operators.playground/Pages/4. App Exercise - Counting.xcplaygroundpage/Contents.swift index 881654a..0a74840 100644 --- a/Lab - Operators.playground/Pages/4. App Exercise - Counting.xcplaygroundpage/Contents.swift +++ b/Lab - Operators.playground/Pages/4. App Exercise - Counting.xcplaygroundpage/Contents.swift @@ -5,13 +5,16 @@ The most basic feature of your fitness tracking app is counting steps. Create a variable `steps` and set it equal to 0. Then increment its value by 1 to simulate a user taking a step. */ - +var steps = 0 +steps += 1 /*: In addition to tracking steps, your fitness tracking app tracks distance traveled. Create a variable `distance` of type `Double` and set it equal to 50. This will represent the user having traveled 50 feet. You decide, however, to display the distance in meters. 1 meter is approximately equal to 3 feet. Use a compound assignment operator to convert `distance` to meters. Print the result. */ - +var distance: Double = 50 +distance /= 3 +print("Distance approximately equals \(distance) meters") //: [Previous](@previous) | page 4 of 8 | [Next: Exercise - Order of Operations](@next) diff --git a/Lab - Operators.playground/Pages/5. Exercise - Order of Operations.xcplaygroundpage/Contents.swift b/Lab - Operators.playground/Pages/5. Exercise - Order of Operations.xcplaygroundpage/Contents.swift index e8378a0..272443a 100644 --- a/Lab - Operators.playground/Pages/5. Exercise - Order of Operations.xcplaygroundpage/Contents.swift +++ b/Lab - Operators.playground/Pages/5. Exercise - Order of Operations.xcplaygroundpage/Contents.swift @@ -3,21 +3,19 @@ Print out what you think 10 + 2 * 5 evaluates to. Then print out the actual expression (i.e. `print(10 + 2 * 5)`) */ - - +print(20) +print(10 + 2 * 5) /*: In a separate `print` statement, add in the necessary parentheses so that addition takes place before multiplication. */ - - +print((10 + 2) * 5) /*: Print out what you think 4 * 9 - 6 / 2 evaluates to. Then print out the actual expression. */ - - +print(33) +print(4 * 9 - 6 / 2) /*: In a separate `print` statement, add in the necessary parentheses so that the subtraction is prioritized over the multiplication and division. */ - - +print(4 * (9-6) / 2) //: [Previous](@previous) | page 5 of 8 | [Next: App Exercise - Complex Fitness Calculations](@next) diff --git a/Lab - Operators.playground/Pages/6. App Exercise - Complex Fitness Calculations.xcplaygroundpage/Contents.swift b/Lab - Operators.playground/Pages/6. App Exercise - Complex Fitness Calculations.xcplaygroundpage/Contents.swift index 1f2189c..8a73efb 100644 --- a/Lab - Operators.playground/Pages/6. App Exercise - Complex Fitness Calculations.xcplaygroundpage/Contents.swift +++ b/Lab - Operators.playground/Pages/6. App Exercise - Complex Fitness Calculations.xcplaygroundpage/Contents.swift @@ -5,13 +5,17 @@ If you completed the Fitness Calculations exercise, you calculated an average heart rate to display to the user. However, using proper order of operations you can do this in fewer steps. Create three separate heart rate constants, all of type `Double`, with values between 60 and 100. Then create a constant equal to the average heart rate. If you use correct order of operations you can do the heart calculation in one line. */ - +let firstHeartRate: Double = 60 +let secondHeartRate: Double = 75 +let thirdHeartRate: Double = 100 +let averageHeartRate = (firstHeartRate + secondHeartRate + thirdHeartRate) / 3 /*: One feature you might want to give users is to display their current body temperature. Create a constant `tempInFahrenheit` equal to 98.6. You may want to also show the temperature in celsius. You can convert fahrenheit to celsius by taking `tempInFahrenheit` and subtracting 32, then multiplying the result by (5.0/9.0). Create a constant `tempInCelsius` that calculates in one line the temperature in celsius. */ - +let tempInFahrenheit = 98.6 +let tempInCelsius = (tempInFahrenheit - 32) * (5.0/9.0) //: [Previous](@previous) | page 6 of 8 | [Next: Exercise - Numeric Type Conversion](@next) diff --git a/Lab - Operators.playground/Pages/7. Exercise - Numeric Type Conversion.xcplaygroundpage/Contents.swift b/Lab - Operators.playground/Pages/7. Exercise - Numeric Type Conversion.xcplaygroundpage/Contents.swift index 93698b8..a6b759e 100644 --- a/Lab - Operators.playground/Pages/7. Exercise - Numeric Type Conversion.xcplaygroundpage/Contents.swift +++ b/Lab - Operators.playground/Pages/7. Exercise - Numeric Type Conversion.xcplaygroundpage/Contents.swift @@ -3,16 +3,22 @@ Create an integer constant `x` with a value of 10, and a double constant `y` with a value of 3.2. Create a constant `multipliedAsIntegers` equal to `x` times `y`. Does this compile? If not, fix it by converting your `Double` to an `Int` in the mathematical expression. Print the result. */ - +let x: Int = 10 +let y: Double = 3.2 +//let multipliedAsIntegers = x * y +//We can't do operation between two differents types (Int and Double) +let multipliedAsIntegers = x * Int(y) +print(multipliedAsIntegers) /*: Create a constant `multipliedAsDoubles` equal to `x` times `y`, but this time convert the `Int` to a `Double` in the expression. Print the result. */ - +let multipliedAsDoubles = Double(x) * y +print(multipliedAsDoubles) /*: Are the values of `multipliedAsIntegers` and `multipliedAsDoubles` different? Print a statement to the console explaining why. */ - +print("They differ because in multipliedAsIntegers results of multiplication between an Int and converted Double to Int (10 * 3 = 30) whereas multipliedAsDoubles results of multiplication between an Double and converted Int to Double (10.0 * 3.2 = 32.0)") //: [Previous](@previous) | page 7 of 8 | [Next: App Exercise - Converting Types](@next) diff --git a/Lab - Operators.playground/Pages/8. App Exercise - Fitness Conversions.xcplaygroundpage/Contents.swift b/Lab - Operators.playground/Pages/8. App Exercise - Fitness Conversions.xcplaygroundpage/Contents.swift index 5de2f53..608650b 100644 --- a/Lab - Operators.playground/Pages/8. App Exercise - Fitness Conversions.xcplaygroundpage/Contents.swift +++ b/Lab - Operators.playground/Pages/8. App Exercise - Fitness Conversions.xcplaygroundpage/Contents.swift @@ -7,8 +7,9 @@ Now create a constant `percentOfGoal` of type `Double` that equals the percent of the goal that has been reached so far. You'll need to convert your constants of type `Int` to be of type `Double` in your calculation. */ - - +let steps: Int = 5_999 +let goal: Int = 10_000 +let percentOfGoal: Double = Double(steps) / Double(goal) * 100 /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Optionals.playground/Pages/1. Exercise - Optionals.xcplaygroundpage/Contents.swift b/Lab - Optionals.playground/Pages/1. Exercise - Optionals.xcplaygroundpage/Contents.swift index 6a8462d..7aa96d3 100644 --- a/Lab - Optionals.playground/Pages/1. Exercise - Optionals.xcplaygroundpage/Contents.swift +++ b/Lab - Optionals.playground/Pages/1. Exercise - Optionals.xcplaygroundpage/Contents.swift @@ -7,23 +7,27 @@ Declare a constant `userInputAge` of type `String` and assign it "34e" to simulate a typo while typing age. Then declare a constant `userAge` of type `Int` and set its value using the `Int` initializer that takes an instance of `String` as input. Pass in `userInputAge` as the argument for the initializer. What error do you get? */ - - +let userInputAge = "34" +//let userAge: Int = Int(userInputAge) +let userAge: Int? = Int(userInputAge) +//Int(userInputAge) is optional initializer so userAge have to be Int? /*: Go back and change the type of `userAge` to `Int?`, and print the value of `userAge`. Why is `userAge`'s value `nil`? Provide your answer in a comment or print statement below. */ - - +print(userAge ?? "failed convert string to int") +//userAge is nil if userInputAge is 34e because It can't be converted into Int because of e in 34e /*: Now go back and fix the typo on the value of `userInputAge`. Is there anything about the value printed that seems off? Print `userAge` again, but this time unwrap `userAge` using the force unwrap operator. */ - +print(userAge!) /*: Now use optional binding to unwrap `userAge`. If `userAge` has a value, print it to the console. */ - +if let userAge = userAge { + print(userAge) +} //: page 1 of 6 | [Next: App Exercise - Finding a Heart Rate](@next) diff --git a/Lab - Optionals.playground/Pages/2. App Exercise - Finding a Heart Rate.xcplaygroundpage/Contents.swift b/Lab - Optionals.playground/Pages/2. App Exercise - Finding a Heart Rate.xcplaygroundpage/Contents.swift index 746b8fc..ac93faf 100644 --- a/Lab - Optionals.playground/Pages/2. App Exercise - Finding a Heart Rate.xcplaygroundpage/Contents.swift +++ b/Lab - Optionals.playground/Pages/2. App Exercise - Finding a Heart Rate.xcplaygroundpage/Contents.swift @@ -7,12 +7,13 @@ Declare a variable `heartRate` of type `Int?` and set it to `nil`. Print the value. */ - - +var heartRate: Int? = nil +print(heartRate) /*: In this example, if the user fixes the positioning of the heart rate monitor, the app may get a proper heart rate reading. Below, update the value of `heartRate` to 74. Print the value. */ - +heartRate = 74 +print(heartRate) /*: As you've done in other app exercises, create a variable `hrAverage` of type `Int` and use the values stored below and the value of `heartRate` to calculate an average heart rate. @@ -22,6 +23,13 @@ let oldHR2 = 76 let oldHR3 = 79 let oldHR4 = 70 +if let heartRate = heartRate { + let hrAverage = (oldHR1 + oldHR2 + oldHR3 + oldHR4 + heartRate) / 5 + print(hrAverage) +} else { + let hrAverage = (oldHR1 + oldHR2 + oldHR3 + oldHR4) / 4 + print(hrAverage) +} /*: If you didn't unwrap the value of `heartRate`, you've probably noticed that you cannot perform mathematical operations on an optional value. You will first need to unwrap `heartRate`. diff --git a/Lab - Optionals.playground/Pages/3. Exercise - Functions and Optionals.xcplaygroundpage/Contents.swift b/Lab - Optionals.playground/Pages/3. Exercise - Functions and Optionals.xcplaygroundpage/Contents.swift index 798d991..dcba771 100644 --- a/Lab - Optionals.playground/Pages/3. Exercise - Functions and Optionals.xcplaygroundpage/Contents.swift +++ b/Lab - Optionals.playground/Pages/3. Exercise - Functions and Optionals.xcplaygroundpage/Contents.swift @@ -5,16 +5,40 @@ */ let userInputAge: String = "34e" +func checkAge(age: String) -> Int? { + if let age = Int(age) { + if age >= 18 { + print("Welcome!") + } else { + print("Sorry, but you aren't old enough to use our app.") + } + return age + } else { + print("Sorry, something went wrong. Can you please re-enter your age?") + return nil + } +} + +checkAge(age: userInputAge) +print(checkAge(age: "12")) /*: Go back and update your function to return the age as an integer. Will your function always return a value? Make sure your return type accurately reflects this. Call the function and print the return value. */ - - +print(checkAge(age: userInputAge)) +print(checkAge(age: "23")) /*: Imagine you are creating an app for making purchases. Write a function that will take the name of an item for purchase and will return the cost of that item. In the body of the function, check to see if the item is in stock by accessing it in the dictionary `stock`. If it is, return the price of the item by accessing it in the dictionary `prices`. If the item is out of stock, return `nil`. Call the function and pass in a `String` that exists in the dictionaries below. Print the return value. */ var prices = ["Chips": 2.99, "Donuts": 1.89, "Juice": 3.99, "Apple": 0.50, "Banana": 0.25, "Broccoli": 0.99] var stock = ["Chips": 4, "Donuts": 0, "Juice": 12, "Apple": 6, "Banana": 6, "Broccoli": 3] +func price(item: String) -> Double? { + if let itemInStock = stock[item] { + return itemInStock > 0 ? prices[item] : nil + } else { + return nil + } +} +print(price(item: "Chips") ?? "Not found or no stock") //: [Previous](@previous) | page 3 of 6 | [Next: App Exercise - Food Functions](@next) diff --git a/Lab - Optionals.playground/Pages/4. App Exercise - Food Functions .xcplaygroundpage/Contents.swift b/Lab - Optionals.playground/Pages/4. App Exercise - Food Functions .xcplaygroundpage/Contents.swift index 98391a4..4cb9c9b 100644 --- a/Lab - Optionals.playground/Pages/4. App Exercise - Food Functions .xcplaygroundpage/Contents.swift +++ b/Lab - Optionals.playground/Pages/4. App Exercise - Food Functions .xcplaygroundpage/Contents.swift @@ -15,12 +15,25 @@ struct Meal { var meals: [String: Meal] = ["Breakfast": Meal(food: ["Bagel", "Orange Juice", "Egg Whites"], calories: 530)] - +func findMeal(meal: String) -> Meal? { + meals[meal] +} +print(findMeal(meal: "Lunch")) +print(findMeal(meal: "Breakfast")) +print(findMeal(meal: "Dinner")) /*: iOS comes with a few different APIs for persistence, or saving data. You'll learn more about persistence in another lesson, but for now imagine what an app experience would be like if every time you opened the app all of your data was gone. That would be frustrating, right? Write a function that will check to see if your meal log (a dictionary like that in the previous exercise) is saved to the device. If it is, return the meal log. If it isn't, return an empty dictionary of type `[String: Any]`. The code you should use in this exercise for retrieving something saved to the device is `UserDefaults.standard.dictionary(forKey: "mealLog")`. This code will return an optional `[String: Any]`. If it returns a value, that is your meal log. If it returns `nil`, then no meal log has been saved. Call the function and print the return value. */ +func findSavedMeal() -> [String: Any] { + if let log = UserDefaults.standard.dictionary(forKey: "mealLog") { + return log + } else { + return [:] + } +} +print(findSavedMeal()) //: [Previous](@previous) | page 4 of 6 | [Next: Exercise - Failable Initializers](@next) diff --git a/Lab - Optionals.playground/Pages/5. Exercise - Failable Initializers.xcplaygroundpage/Contents.swift b/Lab - Optionals.playground/Pages/5. Exercise - Failable Initializers.xcplaygroundpage/Contents.swift index 9a056cd..efcb590 100644 --- a/Lab - Optionals.playground/Pages/5. Exercise - Failable Initializers.xcplaygroundpage/Contents.swift +++ b/Lab - Optionals.playground/Pages/5. Exercise - Failable Initializers.xcplaygroundpage/Contents.swift @@ -3,11 +3,32 @@ Create a `Computer` struct with two properties, `ram` and `yearManufactured`, where both parameters are of type `Int`. Create a failable initializer that will only create an instance of `Computer` if `ram` is greater than 0, and if `yearManufactured` is greater than 1970, and less than 2017. */ +struct Computer { + var ram: Int + var yearManufactured: Int - + init?(ram: Int, yearManufactured: Int) { + if ram > 0 && yearManufactured > 1970 && yearManufactured < 2020 { + self.ram = ram + self.yearManufactured = yearManufactured + } else { + return nil + } + } +} /*: Create two instances of `Computer?` using the failable initializer. One instance should use values that will have a value within the optional, and the other should result in `nil`. Use if-let syntax to unwrap each of the `Computer?` objects and print the `ram` and `yearManufactured` if the optional contains a value. */ +let badComputer = Computer(ram: 0, yearManufactured: 1960) +if let computer = badComputer { + print(computer.ram) + print(computer.yearManufactured) +} +let goodComputer = Computer(ram: 32, yearManufactured: 2016) +if let computer = goodComputer { + print(computer.ram) + print(computer.yearManufactured) +} //: [Previous](@previous) | page 5 of 6 | [Next: App Exercise - Workout or Nil](@next) diff --git a/Lab - Optionals.playground/Pages/6. App Exercise - Workout or Nil.xcplaygroundpage/Contents.swift b/Lab - Optionals.playground/Pages/6. App Exercise - Workout or Nil.xcplaygroundpage/Contents.swift index ab9f71e..3616126 100644 --- a/Lab - Optionals.playground/Pages/6. App Exercise - Workout or Nil.xcplaygroundpage/Contents.swift +++ b/Lab - Optionals.playground/Pages/6. App Exercise - Workout or Nil.xcplaygroundpage/Contents.swift @@ -9,12 +9,34 @@ Write a failable initializer that takes parameters for your start and end times, and then checks to see if they are fewer than 10 seconds apart. If they are, your initializer should fail. Otherwise, they should set the properties accordingly. */ - +struct Workout { + var startTime: Double + var endTime: Double + + init?(startTime: Double, endTime: Double) { + if endTime - startTime < 10 { + return nil + } else { + self.startTime = startTime + self.endTime = endTime + } + } +} /*: Try to initialize two instances of a `Workout` object and print each of them. One of them should not be initialized because the start and end times are too close together. The other should successfully initialize a `Workout` object. */ - +let goodWorkout = Workout(startTime: 0, endTime: 1000) +if let workout = goodWorkout { + print(workout.startTime) + print(workout.endTime) +} + +let badWorkout = Workout(startTime: 0, endTime: 2) +if let workout = badWorkout { + print(workout.startTime) + print(workout.endTime) +} /*: diff --git a/Lab - Scope.playground/Pages/1. Exercise - Scope.xcplaygroundpage/Contents.swift b/Lab - Scope.playground/Pages/1. Exercise - Scope.xcplaygroundpage/Contents.swift index fb002fb..49356f6 100644 --- a/Lab - Scope.playground/Pages/1. Exercise - Scope.xcplaygroundpage/Contents.swift +++ b/Lab - Scope.playground/Pages/1. Exercise - Scope.xcplaygroundpage/Contents.swift @@ -8,7 +8,7 @@ for _ in 0..<10 { print("The value of foo is \(foo)") } //print("The value of foo is \(foo)") - +// because foo is in for scope, we can't use it ouf ot the loop /*: Using a comment or print statement, describe why both print statements below compile when similar-looking code did not compile above. In what scope is `x` defined, and in what scope is it modified? In contrast, in what scope is `foo` defined and used? @@ -19,17 +19,32 @@ for _ in 0..<10 { print("The value of x is \(x)") } print("The final value of x is \(x)") - +// x is declared before loop, It is in global scope we can use it both inside and outside the loop /*: In the body of the function `greeting` below, use variable shadowing when unwrapping `greeting`. If `greeting` is successfully unwrapped, print a statement that uses the given greeting to greet the given name (i.e. if `greeting` successfully unwraps to have the value "Hi there" and `name` is `Sara`, print "Hi there, Sara."). Otherwise, use "Hello" to print a statement greeting the given name. Call the function twice, once passing in a value for greeting, and once passing in `nil`. */ func greeting(greeting: String?, name: String) { - + if let greeting = greeting { + print("\(greeting), \(name).") + } else { + print("Hello, \(name).") + } } +greeting(greeting: "Hi there", name: "Sara") +greeting(greeting: nil, name: "Sara") /*: Create a class called `Car`. It should have properties for `make`, `model`, and `year` that are of type `String`, `String`, and `Int`, respectively. Since this is a class, you'll need to write your own memberwise initializer. Use shadowing when naming parameters in your initializer. */ - - +class Car { + let make: String + let model: String + let year: Int + + init(make: String, model: String, year: Int) { + self.make = make + self.model = model + self.year = year + } +} //: page 1 of 2 | [Next: App Exercise - Step Competition](@next) diff --git a/Lab - Scope.playground/Pages/2. App Exercise - Step Competition.xcplaygroundpage/Contents.swift b/Lab - Scope.playground/Pages/2. App Exercise - Step Competition.xcplaygroundpage/Contents.swift index a4c5c73..44ffc67 100644 --- a/Lab - Scope.playground/Pages/2. App Exercise - Step Competition.xcplaygroundpage/Contents.swift +++ b/Lab - Scope.playground/Pages/2. App Exercise - Step Competition.xcplaygroundpage/Contents.swift @@ -8,6 +8,19 @@ struct User { var name: String var stepsToday: Int + + init(name: String, stepsToday: Int) { + self.name = name + self.stepsToday = stepsToday + } + + init?(name: String?, stepsToday: Int?) { + guard let name = name, + let stepsToday = stepsToday else {return nil} + + self.name = name + self.stepsToday = stepsToday + } } let stepMaster = User(name: "StepMaster", stepsToday: 8394) @@ -24,8 +37,8 @@ func getWinner(competitors: [User]) -> User? { var topCompetitor: User? for competitor in competitors { - if let topCompetitor = topCompetitor { - if competitor.stepsToday > topCompetitor.stepsToday { + if let currentTopCompetitor = topCompetitor { + if competitor.stepsToday > currentTopCompetitor.stepsToday { topCompetitor = competitor } } else { @@ -34,6 +47,9 @@ func getWinner(competitors: [User]) -> User? { } return topCompetitor } + +let winner = getWinner(competitors: competitors) +print(winner?.name ?? "") /*: Write a memberwise initializer inside the `User` struct above that uses variable shadowing for naming the parameters of the initializer. */ @@ -42,8 +58,9 @@ func getWinner(competitors: [User]) -> User? { /*: Now write a failable initializer inside the `User` struct above that takes parameters `name` and `stepsToday` as an optional `String` and `Int`, respectively. The initializer should return `nil` if either of the parameters are `nil`. Use variable shadowing when unwrapping the two parameters. */ - - +User(name: nil, stepsToday: 3200) +User(name: "Yannis", stepsToday: nil) +User(name: "Yannis", stepsToday: 3200) /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Strings.playground/Pages/1. Exercise - String Basics.xcplaygroundpage/Contents.swift b/Lab - Strings.playground/Pages/1. Exercise - String Basics.xcplaygroundpage/Contents.swift index d17ab77..be5e4e4 100644 --- a/Lab - Strings.playground/Pages/1. Exercise - String Basics.xcplaygroundpage/Contents.swift +++ b/Lab - Strings.playground/Pages/1. Exercise - String Basics.xcplaygroundpage/Contents.swift @@ -3,7 +3,7 @@ Create a `name` constant and assign it a string literal representing your name. */ - +let name = "Yannis" /*: Create a `favoriteQuote` constant and assign it the following string literal: @@ -15,12 +15,15 @@ - callout(Example): If your favorite quote is "The grass is always greener on the other side" the value of `favoriteQuote` should be such that printing `favoriteQuote` results in the following: * `My favorite quote is "The grass is always greener on the other side."` */ - - +let favoriteQuote = "My favorite quote is \"The grass is always greener on the other side.\"" +print(favoriteQuote) /*: Write an if-else statement that prints "There's nothing here" if `emptyString` is empty, and "It's not as empty as I thought" otherwise. */ let emptyString = "" - - +if emptyString.isEmpty { + print("There's nothing here") +} else { + print("It's not as empty as I thought") +} //: page 1 of 5 | [Next: Exercise - Concatenation and Interpolation](@next) diff --git a/Lab - Strings.playground/Pages/2. Exercise - Concatenation and Interpolation.xcplaygroundpage/Contents.swift b/Lab - Strings.playground/Pages/2. Exercise - Concatenation and Interpolation.xcplaygroundpage/Contents.swift index 2bbe7f2..7026d00 100644 --- a/Lab - Strings.playground/Pages/2. Exercise - Concatenation and Interpolation.xcplaygroundpage/Contents.swift +++ b/Lab - Strings.playground/Pages/2. Exercise - Concatenation and Interpolation.xcplaygroundpage/Contents.swift @@ -3,13 +3,16 @@ Create a `city` constant and assign it a string literal representing your home city. Then create a `state` constant and assign it a string literal representing your home state. Finally, create a `home` constant and use string concatenation to assign it a string representing your home city and state (i.e. Portland, Oregon). Print the value of `home`. */ - - +let city = "Marseille" +let state = "Provence-Alpes-Cote-d'Azur" +let home = city + ", " + state +print(home) /*: Use the compound assignment operator (`+=`) to add `home` to `introduction` below. Print the value of `introduction`. */ -var introduction = "I live in" - +var introduction = "I live in " +introduction += home +print(introduction) /*: Declare a `name` constant and assign it your name as a string literal. Then declare an `age` constant and give it your current age as an `Int`. Then print the following phrase using string interpolation: @@ -18,6 +21,8 @@ var introduction = "I live in" Insert `name` where indicated, and insert a mathematical expression that evaluates to your current age plus one where indicated. */ - +let name = "Yannis" +let age = 23 +print("My name is \(name) and after my next birthday I will be \(age + 1) years old.") //: [Previous](@previous) | page 2 of 5 | [Next: App Exercise - Notifications](@next) diff --git a/Lab - Strings.playground/Pages/3. App Exercise - Notifications.xcplaygroundpage/Contents.swift b/Lab - Strings.playground/Pages/3. App Exercise - Notifications.xcplaygroundpage/Contents.swift index abb8e54..f8c2e35 100644 --- a/Lab - Strings.playground/Pages/3. App Exercise - Notifications.xcplaygroundpage/Contents.swift +++ b/Lab - Strings.playground/Pages/3. App Exercise - Notifications.xcplaygroundpage/Contents.swift @@ -7,7 +7,10 @@ Create `firstName` and `lastName` constants and assign them string literals representing a user's first name and last name, respectively. Create a `fullName` constant that uses string concatenation to combine `firstName` and `lastName`. Print the value of `fullName`. */ - +let firstName = "Yannis" +let lastName = "Lang" +let fullName = firstName + " " + lastName +print(fullName) /*: Occasionally users of your fitness tracking app will beat previous goals or records. You may want to notify them when this happens for encouragement purposes. Create a new constant `congratulations` and assign it a string literal that uses string interpolation to create the following string: @@ -18,6 +21,6 @@ */ let previousBest = 14392 let newBest = 15125 - - +let congratulations = "Congratulations, \(fullName)! You beat your previous daily high score of \(previousBest) steps by walking \(newBest) steps yesterday !" +print(congratulations) //: [Previous](@previous) | page 3 of 5 | [Next: Exercise - String Equality and Comparison](@next) diff --git a/Lab - Strings.playground/Pages/4. Exercise - String Equality and Comparison.xcplaygroundpage/Contents.swift b/Lab - Strings.playground/Pages/4. Exercise - String Equality and Comparison.xcplaygroundpage/Contents.swift index 3ee86db..b633924 100644 --- a/Lab - Strings.playground/Pages/4. Exercise - String Equality and Comparison.xcplaygroundpage/Contents.swift +++ b/Lab - Strings.playground/Pages/4. Exercise - String Equality and Comparison.xcplaygroundpage/Contents.swift @@ -3,8 +3,13 @@ Create two constants, `nameInCaps` and `name`. Assign `nameInCaps` your name as a string literal with proper capitalization. Assign `name` your name as a string literal in all lowercase. Write an if-else statement that checks to see if `nameInCaps` and `name` are the same. If they are, print "The two strings are equal", otherwise print "The two strings are not equal." */ - - +let nameInCaps = "Yannis Lang" +let name = nameInCaps.lowercased() +if nameInCaps == name { + print("The two strings are equal") +} else { + print("The two strings are not equal") +} /*: Write a new if-else statement that also checks to see if `nameInCaps` and `name` are the same. However, this time use the `lowercased()` method on each constant to compare the lowercase version of the strings. If they are equal, print the following statement using string interpolations: @@ -14,13 +19,21 @@ - " and are not the same." */ - - +let lowercasedNameInCaps = nameInCaps.lowercased() +let lowercasedName = name.lowercased() +if lowercasedNameInCaps == lowercasedName { + print("\(lowercasedNameInCaps) and \(lowercasedName) are the same") +} else { + print("\(lowercasedNameInCaps) and \(lowercasedName) are not the same") +} /*: Imagine you are looking through a list of names to find any that end in "Jr." Write an if statement below that will check if `junior` has the suffix "Jr.". If it does, print "We found a second generation name!" */ let junior = "Cal Ripken Jr." +if junior.hasSuffix("Jr.") { + print("We found a second generation name!") +} /*: Suppose you are trying to find a document on your computer that contains Hamlet's famous soliloquy written by Shakespeare. You write a simple app that will check every document to see if it contains the phrase "to be, or not to be". You decide to do part of this with the `contains(_:)` method. Write an if statement below that will check if `textToSearchThrough` contains `textToSearchFor`. If it does, print "I found it!" Be sure to make this functionality case insensitive. @@ -28,11 +41,13 @@ let junior = "Cal Ripken Jr." import Foundation let textToSearchThrough = "To be, or not to be--that is the question" let textToSearchFor = "to be, or not to be" - +if textToSearchThrough.lowercased().contains(textToSearchFor.lowercased()) { + print("I found it!") +} /*: Print to the console the number of characters in your name by using the `count` property on `name`. */ - +print(name.count) //: [Previous](@previous) | page 4 of 5 | [Next: App Exercise - Password Entry and User Search](@next) diff --git a/Lab - Strings.playground/Pages/5. App Exercise - Password Entry and User Search.xcplaygroundpage/Contents.swift b/Lab - Strings.playground/Pages/5. App Exercise - Password Entry and User Search.xcplaygroundpage/Contents.swift index e396836..7996251 100644 --- a/Lab - Strings.playground/Pages/5. App Exercise - Password Entry and User Search.xcplaygroundpage/Contents.swift +++ b/Lab - Strings.playground/Pages/5. App Exercise - Password Entry and User Search.xcplaygroundpage/Contents.swift @@ -10,7 +10,11 @@ let storedPassword = "a8H1LuK91" let enteredUserName = "thefittest11" let enteredPassword: String = "a8H1Luk9" - +if enteredUserName.lowercased() == storedUserName.lowercased() && enteredPassword == storedPassword { + print("You are now logged in!") +} else { + print("Please check your user name and password and try again.") +} /*: Now that users can log in, they need to be able to search through a list of users to find their friends. This might normally be done by having the user enter a name, and then looping through all user names to see if a user name contains the search term entered. You'll learn about loops later, so for now you'll just work through one cycle of that. Imagine you are searching for a friend whose user name is StepChallenger. You enter "step" into a search bar and the app begins to search. When the app comes to the user name "stepchallenger," it checks to see if "StepChallenger" contains "step." @@ -20,7 +24,9 @@ import Foundation let userName = "StepChallenger" let searchName = "step" - +if userName.lowercased().contains(searchName) { + print("I found StepChallenger") +} /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Structures.playground/Pages/1. Exercise - Structs, Instances, and Default Values.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/1. Exercise - Structs, Instances, and Default Values.xcplaygroundpage/Contents.swift index 61fd1f3..a99a3b6 100644 --- a/Lab - Structures.playground/Pages/1. Exercise - Structs, Instances, and Default Values.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/1. Exercise - Structs, Instances, and Default Values.xcplaygroundpage/Contents.swift @@ -3,26 +3,41 @@ Imagine you are creating an app that will monitor location. Create a `GPS` struct with two variable properties, `latitude` and `longitude`, both with default values of 0.0. */ - - +struct GPS { + var latitute = 0.0 + var longitude = 0.0 +} /*: Create a variable instance of `GPS` called `somePlace`. It should be initialized without supplying any arguments. Print out the latitude and longitude of `somePlace`, which should be 0.0 for both. */ - - +var somePlace = GPS() +print(somePlace.latitute) +print(somePlace.longitude) /*: Change `somePlace`'s latitude to 51.514004, and the longitude to 0.125226, then print the updated values. */ - - +somePlace.latitute = 51.514004 +somePlace.longitude = 0.125226 +print(somePlace.latitute) +print(somePlace.longitude) /*: Now imagine you are making a social app for sharing your favorite books. Create a `Book` struct with four variable properties: `title`, `author`, `pages`, and `price`. The default values for both `title` and `author` should be an empty string. `pages` should default to 0, and `price` should default to 0.0. */ - - +struct Book { + var title = "" + var author = "" + var pages = 0 + var price = 0.0 +} /*: Create a variable instance of `Book` called `favoriteBook` without supplying any arguments. Print out the title of `favoriteBook`. Does it currently reflect the title of your favorite book? Probably not. Change all four properties of `favoriteBook` to reflect your favorite book. Then, using the properties of `favoriteBook`, print out facts about the book. */ - - +var favoriteBook = Book() +print(favoriteBook.title) +favoriteBook.title = "Develop in Swift Fundamentals" +favoriteBook.author = "Apple" +favoriteBook.pages = 603 +favoriteBook.price = 0.0 + +print("\(favoriteBook.title) wrotten by \(favoriteBook.author) is \(favoriteBook.pages) pages long and is free (\(favoriteBook.price)€)") //: page 1 of 10 | [Next: App Exercise - Workout Tracking](@next) diff --git a/Lab - Structures.playground/Pages/10. App Exercise - Type Properties and Methods.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/10. App Exercise - Type Properties and Methods.xcplaygroundpage/Contents.swift index 159bdcc..def68ae 100644 --- a/Lab - Structures.playground/Pages/10. App Exercise - Type Properties and Methods.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/10. App Exercise - Type Properties and Methods.xcplaygroundpage/Contents.swift @@ -10,15 +10,24 @@ Call the method from outside of the struct and print the result to ensure that it works properly. */ struct RunningWorkout { + static var meterInFeet = 3.28084 + static var mileInMeters = 1600.0 + + static func mileTimeFor(distance: Double, time: Double) -> Double { + time/distance * mileInMeters + } + var distance: Double var time: Double var elevation: Double } +let mileTime = RunningWorkout.mileTimeFor(distance: 300, time: 60) +print(mileTime) /*: It may be helpful to have a few type properties on `RunningWorkout` representing unit conversions (i.e. meters to mile, feet to meters, etc.). Go back and add a type property for `meterInFeet` and assign it 3.28084. Then add a type property for `mileInMeters` and assign it 1600.0. Print both of these values below. */ - - +print(RunningWorkout.meterInFeet) +print(RunningWorkout.mileInMeters) /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Structures.playground/Pages/2. App Exercise - Workout Tracking.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/2. App Exercise - Workout Tracking.xcplaygroundpage/Contents.swift index 87c64af..18c05ab 100644 --- a/Lab - Structures.playground/Pages/2. App Exercise - Workout Tracking.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/2. App Exercise - Workout Tracking.xcplaygroundpage/Contents.swift @@ -7,16 +7,24 @@ Create a `RunningWorkout` struct. It should have variables properties for `distance`, `time`, and `elevation`. All three properties should have default values of 0.0. */ - +struct RunningWorkout { + var distance = 0.0 + var time = 0.0 + var elevation = 0.0 +} /*: Create a variable instance of `RunningWorkout` called `firstRun` without supplying any arguments. Print out all three properties of `firstRun`. This is a good example of when using default values is appropriate, seeing as all running workouts start with a distance, time, and elevation change of 0. */ - - +var firstRun = RunningWorkout() +print(firstRun.distance) +print(firstRun.time) +print(firstRun.elevation) /*: Now imagine that throughout the course of the run, you go a distance of 2,396 meters in 15.3 minutes, and gain 94 meters of elevation. Update the values of `firstRun`'s properties accordingly. Print a statement about your run using the values of each property. */ - - +firstRun.distance = 2396 +firstRun.time = 15.3 +firstRun.elevation = 94 +print("distance ran = \(firstRun.distance) meters\ntime = \(firstRun.time)\nelevation = \(firstRun.elevation) meters.") //: [Previous](@previous) | page 2 of 10 | [Next: Exercise - Memberwise and Custom Initializers](@next) diff --git a/Lab - Structures.playground/Pages/3. Exercise - Memberwise and Custom Initializers.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/3. Exercise - Memberwise and Custom Initializers.xcplaygroundpage/Contents.swift index 6afc9c6..63a6b6a 100644 --- a/Lab - Structures.playground/Pages/3. Exercise - Memberwise and Custom Initializers.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/3. Exercise - Memberwise and Custom Initializers.xcplaygroundpage/Contents.swift @@ -3,18 +3,28 @@ If you completed the exercise Structs, Instances, and Default Values, you created a `GPS` struct with default values for properties of `latitude` and `longitude`. Create your `GPS` struct again, but this time do not provide default values. Both properties should be of type `Double`. */ - - +struct GPS { + var latitute: Double + var longitude: Double +} /*: Now create a constant instance of `GPS` called `somePlace`, and use the memberwise initializer to set `latitude` to 51.514004, and `longitude` to 0.125226. Print the values of `somePlace`'s properties. */ - - +let somePlace = GPS(latitute: 51.514004, longitude: 0.125226) +print(somePlace.latitute) +print(somePlace.longitude) /*: In Structs, Instance, and Default Values, you also created a `Book` struct with properties `title`, `author`, `pages`, and `price`. Create this struct again without default values. Give each property the appropriate type. Declare your `favoriteBook` instance and pass in the values of your favorite book using the memberwise initializer. Print a statement about your favorite book using `favoriteBook`'s properties. */ - - +struct Book { + var title: String + var author: String + var pages: Int + var price: Double +} + +var favoriteBook = Book(title: "Develop in Swift Fundamentals", author: "Apple", pages: 603, price: 0.0) +print("\(favoriteBook.title) wrotten by \(favoriteBook.author) is \(favoriteBook.pages) pages long and is free (\(favoriteBook.price)€)") /*: Make a `Height` struct with two variable properties, `heightInInches` and `heightInCentimeters`. Both should be of type `Double`. @@ -22,16 +32,28 @@ - Example: If you use the initializer for inches to pass in a height of 65, the initializer should set `heightInInches` to 65 and `heightInCentimeters` to 165.1. */ - - +struct Height { + var heightInInches: Double + var heightInCentimeters: Double + + init(heightInInches: Double) { + self.heightInInches = heightInInches + self.heightInCentimeters = heightInInches*2.54 + } + + init(heightInCentimeters: Double) { + self.heightInCentimeters = heightInCentimeters + self.heightInInches = heightInCentimeters/2.54 + } +} /*: Now create a variable instance of `Height` called `someonesHeight`. Use the initializer for inches to set the height to 65. Print out the property for height in centimeters and verify that it is equal to 165.1. */ - - +var someonesHeight = Height(heightInInches: 65) +print(someonesHeight.heightInCentimeters) /*: Now create a variable instance of `Height` called `myHeight` and initialize it with your own height. Verify that both `heightInInches` and `heightInCentimeters` are accurate. */ - - +var myHeight = Height(heightInCentimeters: 165.1) +print(myHeight.heightInInches) //: [Previous](@previous) | page 3 of 10 | [Next: App Exercise - Users and Distance](@next) diff --git a/Lab - Structures.playground/Pages/4. App Exercise - Users and Distance.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/4. App Exercise - Users and Distance.xcplaygroundpage/Contents.swift index 751d413..e40ca14 100644 --- a/Lab - Structures.playground/Pages/4. App Exercise - Users and Distance.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/4. App Exercise - Users and Distance.xcplaygroundpage/Contents.swift @@ -5,28 +5,45 @@ For most apps you'll need to have a data structure to hold information about a user. Create a `User` struct that has properties for basic information about a user. At a minimum, it should have properties to represent a user's name, age, height, weight, and activity level. You could do this by having `name` be a `String`, `age` be an `Int`, `height` and `weight` be of type `Double`, and `activityLevel` be an `Int` that will represent a scoring 1-10 of how active they are. Implement this now. */ - - +struct User { + var name: String + var age: Int + var height: Double + var weight: Double + var activityLevel: Int +} /*: Create a variable instance of `User` and call it your name. Use the memberwise initializer to pass in information about yourself. Then print out a description of your `User` instance using the instance's properties. */ - - +var yannis = User(name: "Yannis", age: 23, height: 73, weight: 180, activityLevel: 10) +print("\(yannis.name) => \(yannis.age) years old\nweigh => \(yannis.weight) lbs\n\(yannis.height) inches tall\nactivity scale => \(yannis.activityLevel)") /*: In previous app exercises, you've worked with distance in the fitness tracking app example as a simple number. However, distance can be represented using a variety of units of measurement. Create a `Distance` struct that will represent distance in various units of measurement. At a minimum, it should have a `meters` property and a `feet` property. Create a custom initializer corresponding to each property (i.e. if you only have the two properties for meters and feet you will then have two initializers) that will take in a distance in one unit of measurement and assign the correct value to both units of measurements. Hint: *1 meter = 3.28084 feet*. - Example: If you use the initializer for meters and pass in a distance of 1600, the initializer should set `meters` to 1600 and `feet` to 5249.344. */ - - +struct Distance { + var meters: Double + var feet: Double + + init(meters: Double) { + self.meters = meters + self.feet = meters*3.28084 + } + + init(feet: Double) { + self.feet = feet + self.meters = feet/3.28084 + } +} /*: Now create an instance of `Distance` called `mile`. Use the initializer for meters to set the distance to 1600. Print out the property for feet and verify that it is equal to 5249.344. */ - - +let mile = Distance(meters: 1600) +print(mile.feet) /*: Now create another instance of `Distance` and give it some other distance. Ensure that both properties are set correctly. */ - - +let secondDistance = Distance(meters: 23500) +print(secondDistance.feet) //: [Previous](@previous) | page 4 of 10 | [Next: Exercise - Methods](@next) diff --git a/Lab - Structures.playground/Pages/5. Exercise - Methods.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/5. Exercise - Methods.xcplaygroundpage/Contents.swift index d90b425..d001b4b 100644 --- a/Lab - Structures.playground/Pages/5. Exercise - Methods.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/5. Exercise - Methods.xcplaygroundpage/Contents.swift @@ -8,7 +8,14 @@ struct Book { var author: String var pages: Int var price: Double + + func description() { + print("▶️\(title)\nAuthor ▶️ \(author)\n▶️\(pages) pages\nPrice ▶️ \(price)€") + } } + +let myBook = Book(title: "Untitled", author: "Yannis", pages: 230, price: 15.0) +myBook.description() /*: A `Post` struct has been created for you below, representing a generic social media post. Add a mutating method on `Post` called `like` that will increment `likes` by one. Then create an instance of `Post` and call `like()` on it. Print out the `likes` property before and after calling the method to see whether or not the value was incremented. */ @@ -16,5 +23,14 @@ struct Post { var message: String var likes: Int var numberOfComments: Int + + mutating func like() { + likes += 1 + } } + +var myPost = Post(message: "Hello !", likes: 999999, numberOfComments: 999) +print(myPost.likes) +myPost.like() +print(myPost.likes) //: [Previous](@previous) | page 5 of 10 | [Next: App Exercise - Workout Functions](@next) diff --git a/Lab - Structures.playground/Pages/6. App Exercise - Workout Functions.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/6. App Exercise - Workout Functions.xcplaygroundpage/Contents.swift index 774deca..b9162ae 100644 --- a/Lab - Structures.playground/Pages/6. App Exercise - Workout Functions.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/6. App Exercise - Workout Functions.xcplaygroundpage/Contents.swift @@ -9,12 +9,28 @@ struct RunningWorkout { var distance: Double var time: Double var elevation: Double + + func postWorkoutStats() { + print("Distance = \(distance)m\nTime = \(time)s\nElevation = \(elevation)m") + } } + +let myRun = RunningWorkout(distance: 12322, time: 5445, elevation: 6) +myRun.postWorkoutStats() /*: A `Steps` struct has been created for you below, representing the day's step-tracking data. It has the goal number of steps for the day and the number of steps taken so far. Create a method on `Steps` called `takeStep` that increments the value of `steps` by one. Then create an instance of `Steps` and call `takeStep()`. Print the value of the instance's `steps` property before and after the method call. */ struct Steps { var steps: Int var goal: Int + + mutating func takeStep() { + steps += 1 + } } + +var steps = Steps(steps: 0, goal: 4500) +print(steps.steps) +steps.takeStep() +print(steps.steps) //: [Previous](@previous) | page 6 of 10 | [Next: Exercise - Computed Properties and Property Observers](@next) diff --git a/Lab - Structures.playground/Pages/7. Exercise - Computed Properties and Property Observers.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/7. Exercise - Computed Properties and Property Observers.xcplaygroundpage/Contents.swift index cb8e9f0..6243e86 100644 --- a/Lab - Structures.playground/Pages/7. Exercise - Computed Properties and Property Observers.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/7. Exercise - Computed Properties and Property Observers.xcplaygroundpage/Contents.swift @@ -6,25 +6,52 @@ struct Rectangle { var width: Int var height: Int + + var area: Int { + width * height + } } + +var rect = Rectangle(width: 10, height: 11) +print(rect.area) /*: In the `Height` struct below, height is represented in both inches and centimeters. However, if `heightInInches` is changed, `heightInCentimeters` should also adjust to match it. Add a `didSet` to each property that will check if the other property is what it should be, and if not, sets the proper value. If you set the value of the other property even though it already has the right value, you will end up with an infinite loop of each property setting the other. Create an instance of `Height` and then change one of its properties. Print out the other property to ensure that it was adjusted accordingly. */ struct Height { - var heightInInches: Double - var heightInCentimeters: Double + var heightInInches: Double { + didSet { + let newHeightInCentimeters = heightInInches * 2.54 + if heightInCentimeters != newHeightInCentimeters { + heightInCentimeters = newHeightInCentimeters + } + } + } + + var heightInCentimeters: Double { + didSet { + let newHeightInInches = heightInCentimeters / 2.54 + if heightInInches != newHeightInInches { + heightInInches = newHeightInInches + } + } + } init(heightInInches: Double) { self.heightInInches = heightInInches - self.heightInCentimeters = heightInInches*2.54 + self.heightInCentimeters = heightInInches * 2.54 } init(heightInCentimeters: Double) { self.heightInCentimeters = heightInCentimeters - self.heightInInches = heightInCentimeters/2.54 + self.heightInInches = heightInCentimeters / 2.54 } } + +var height = Height(heightInInches: 23) +print(height.heightInCentimeters) +height.heightInInches = 45 +print(height.heightInCentimeters) //: [Previous](@previous) | page 7 of 10 | [Next: App Exercise - Mile Times and Congratulations](@next) diff --git a/Lab - Structures.playground/Pages/8. App Exercise - Mile Times and Congratulations.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/8. App Exercise - Mile Times and Congratulations.xcplaygroundpage/Contents.swift index c53c59b..ad8804c 100644 --- a/Lab - Structures.playground/Pages/8. App Exercise - Mile Times and Congratulations.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/8. App Exercise - Mile Times and Congratulations.xcplaygroundpage/Contents.swift @@ -11,18 +11,34 @@ struct RunningWorkout { var distance: Double var time: Double var elevation: Double + + var averageMileTime: Double { + time / distance * 1600 + } } + +var myWorkout = RunningWorkout(distance: 2332, time: 3333, elevation: 42) +print(myWorkout.averageMileTime) /*: In other app exercises, you've provided encouraging messages to the user based on how many steps they've completed. A great place to check whether or not you should display something to the user is in a property observer. In the `Steps` struct below, add a `willSet` to the `steps` property that will check if the new value is equal to `goal`, and if it is, prints a congratulatory message. Create an instance of `Steps` where `steps` is 9999 and `goal` is 10000, then call `takeStep()` and see if your message is printed to the console. */ struct Steps { - var steps: Int + var steps: Int { + willSet { + if newValue == goal { + print("Congratulations, goal achieved!") + } + } + } var goal: Int mutating func takeStep() { steps += 1 } } + +var steps = Steps(steps: 1, goal: 2) +steps.takeStep() //: [Previous](@previous) | page 8 of 10 | [Next: Exercise - Type Properties and Methods](@next) diff --git a/Lab - Structures.playground/Pages/9. Exercise - Type Properties and Methods.xcplaygroundpage/Contents.swift b/Lab - Structures.playground/Pages/9. Exercise - Type Properties and Methods.xcplaygroundpage/Contents.swift index b4c4457..6e9fbbb 100644 --- a/Lab - Structures.playground/Pages/9. Exercise - Type Properties and Methods.xcplaygroundpage/Contents.swift +++ b/Lab - Structures.playground/Pages/9. Exercise - Type Properties and Methods.xcplaygroundpage/Contents.swift @@ -4,15 +4,23 @@ Imagine you have an app that requires the user to log in. You may have a `User` struct similar to that shown below. However, in addition to keeping track of specific user information, you might want to have a way of knowing who the current logged in user is. Create a `currentUser` type property on the `User` struct below and assign it to a `user` object representing you. Now you can access the current user through the `User` struct. Print out the properties of `currentUser`. */ struct User { + static var currentUser: User = User(userName: "yannis", email: "yannis@me.com", age: 23) + + static func logIn(user: User) { + currentUser = user + print("\(currentUser.userName) is logged") + } + var userName: String var email: String var age: Int } +print("\(User.currentUser.userName) \(User.currentUser.email) \(User.currentUser.age)") /*: There are other properties and actions associated with a `User` struct that might be good candidates for a type property or method. One might be a method for logging in. Go back and create a type method called `logIn(user:)` where `user` is of type `User`. In the body of the method, assign the passed in user to the `currentUser` property, and print out a statement using the user's userName saying that the user has logged in. Below, call the `logIn(user:)` method and pass in a different `User` instance than what you assigned to currentUser above. Observe the printout in the console. */ - - +let newUser = User(userName: "Yaya", email: "yaya@me.com", age: 23) +User.logIn(user: newUser) //: [Previous](@previous) | page 9 of 10 | [Next: App Exercise - Type Properties and Methods](@next) diff --git a/Lab - Type Casting.playground/Pages/1. Exercise - Type Casting and Inspection.xcplaygroundpage/Contents.swift b/Lab - Type Casting.playground/Pages/1. Exercise - Type Casting and Inspection.xcplaygroundpage/Contents.swift index 31ebae6..d77af3e 100644 --- a/Lab - Type Casting.playground/Pages/1. Exercise - Type Casting and Inspection.xcplaygroundpage/Contents.swift +++ b/Lab - Type Casting.playground/Pages/1. Exercise - Type Casting and Inspection.xcplaygroundpage/Contents.swift @@ -3,26 +3,66 @@ Create a collection of type [Any], including a few doubles, integers, strings, and booleans within the collection. Print the contents of the collection. */ - +let myCollection : [Any] = [1.1, 3434.1, 2, 3, "Yannis", "Toto", true, false, false] /*: Loop through the collection. For each integer, print "The integer has a value of ", followed by the integer value. Repeat the steps for doubles, strings and booleans. */ - - +for item in myCollection { + if let value = item as? Int { + print("Int \(value)") + } else if let value = item as? String { + print("String \(value)") + } else if let value = item as? Bool { + print("Bool \(value)") + } else if let value = item as? Double { + print("Double \(value)") + } +} /*: Create a [String : Any] dictionary, where the values are a mixture of doubles, integers, strings, and booleans. Print the key/value pairs within the collection */ - - +let stringAnything: [String: Any] = [ + "keyOne": 1, + "keyTwo": "2", + "keyThree": true, + "keyFour": 4.0, +] +print(stringAnything) /*: Create a variable `total` of type `Double` set to 0. Then loop through the dictionary, and add the value of each integer and double to your variable's value. For each string value, add 1 to the total. For each boolean, add 2 to the total if the boolean is `true`, or subtract 3 if it's `false`. Print the value of `total`. */ +var total: Double = 0 +for value in stringAnything.values { + if let value = value as? Double { + total += value + } else if let value = value as? Int { + total += Double(value) + } else if let value = value as? Bool { + if value { + total += 2 + } else { + total -= 3 + } + } else if value is String { + total += 1 + } +} - +print(total) /*: Create a variable `total2` of type `Double` set to 0. Loop through the collection again, adding up all the integers and doubles. For each string that you come across during the loop, attempt to convert the string into a number, and add that value to the total. Ignore booleans. Print the total. */ - - +var total2 = 0.0 +for value in stringAnything.values { + if let value = value as? Double { + total2 += value + } else if let value = value as? Int { + total2 += Double(value) + } else if let value = value as? String, + let numValue = Double(value) { + total2 += numValue + } +} +print(total2) //: page 1 of 2 | [Next: App Exercise - Workout Types](@next) diff --git a/Lab - Type Casting.playground/Pages/2. App Exercise - Workout Types.xcplaygroundpage/Contents.swift b/Lab - Type Casting.playground/Pages/2. App Exercise - Workout Types.xcplaygroundpage/Contents.swift index ae7131a..1217dee 100644 --- a/Lab - Type Casting.playground/Pages/2. App Exercise - Workout Types.xcplaygroundpage/Contents.swift +++ b/Lab - Type Casting.playground/Pages/2. App Exercise - Workout Types.xcplaygroundpage/Contents.swift @@ -45,13 +45,24 @@ var workouts: [Workout] = [ /*: Write simple functions called `describeRun(runningWorkout:)` and `describeSwim(swimmingWorkout:)` that take a `Run` object and a `Swim` object, respectively. Neither should return values. Each function should print a description of the workout, including the run's cadence or the swim's stroke. Time is represented in seconds, distance is represented in meters, and cadence is represented in steps per minute. */ +func describeRun(runningWorkout: Run) { + print("Run of \(runningWorkout.distance) meters in \(runningWorkout.time) seconds cadenced at \(runningWorkout.cadence) steps/minute") +} +func describeSwim(swimmingWorkout: Swim) { + print("Swim \(swimmingWorkout.stroke) of \(swimmingWorkout.distance) meters in \(swimmingWorkout.time) seconds") +} /*: Now loop through each workout in `workouts` and, using type casting, call either `describeRun(runningWorkout:)` or `describeSwim(swimmingWorkout:)` on each. Observe what is printed to the console. */ - - +for workout in workouts { + if let run = workout as? Run { + describeRun(runningWorkout: run) + } else if let swim = workout as? Swim { + describeSwim(swimmingWorkout: swim) + } +} /*: _Copyright © 2018 Apple Inc._ diff --git a/Lab - Use Documentation.pages b/Lab - Use Documentation.pages new file mode 100755 index 0000000000000000000000000000000000000000..34fb862a4eba9475e6d0e0b72233329428dea846 GIT binary patch literal 183353 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 TVSg2N@R3Ff0GYkuaRB@u{%>nS literal 0 HcmV?d00001