Intro to Swift

Learning Goals

  • Differentiate strings, integers, and doubles
  • Create and modify variables
  • Use string interpolation to write a sentence using variables

Technical Vocabulary

  • Constant
  • Double
  • Integer
  • Interpolation
  • Keyword
  • String
  • Variable

Note: For all practice today, scholars will be working in Xcode Playgrounds.

Warm Up

Create a list of items you need to complete on the Reminders App on your iPad. This can be a list for today, the week, or the whole summer! Explore the Today, Scheduled, and Flagged features as well.

Screen shot of Reminders app being used on an iPad

What is Swift?

Swift is a programming language developed by Apple, specifically for writing applications used on iOS devices. It is responsible for allowing an app to respond to user interaction.

Turn & Talk

Think back to Reminders App that you explored in the Warm Up, and feel free to reference it while answering these questions.

  • When do things change on the screen?
  • As a user, are the changes that happen predictable? Why or why not?
  • Does more than one thing ever happen at a time?

Takeaways:

  • Some of the behaviors of the app: a user can create a list and add as many items on the list as they want. They can also flag specific list items as important or with a specific due date.
  • Behaviors all happen after the user has interacted - tapping the empty area to open up the keyboard, swiping a list item left to get the option to flag or delete, etc.
  • Some actions result in more than one outcome. When a list item is deleted, it’s removed from the list, and the number next to All decreases by one.
  • All of the behaviors on this app were built by someone who wrote code in the Swift language!

Strings

You can think of strings as a series of characters (alpha, numeric, spaces, and special characters) between two double quote marks, like so:

"Hello, World!"

In Swift, we must use double quotes around any characters that we want to be included in the string.

In order to experiment with things, we’ll open a Swift Playground. A playground is a term that developers use for a place where we write code just to learn or experiment. The code we write today won’t directly contribute to building an app, but it will help us develop an understanding of the foundations.

Screenshot of Swift Playground being used

Try It: Strings

In your Playground, type "your first name". Instead of the words "your first name", type your actual name. You do need to include the quotes.

Type "your age".

Type "your full name".

Type anything you want - try to use some characters from your keyboard that are not numbers or letters. Make sure your text is enclosed in double quotes.

Run the code. If there are any errors in the code you wrote, that line will be highlighted in a light red color, and an error message will appear. Read it and try to understand what the problem is. If you can't resolve it, as another scholar or instructor!

Takeaways:

  • Strings can hold any type of character, including spaces
  • The way we type a string will be the exact way a computer sees it (it won’t assume we meant to capitalize that first letter, catch if we misspell something, etc.)

Printing

To print values to the console, Swift gives us a handy print() command. Here’s how it works:

print("Hello, World!")

We would write that line of code in the text editor (top) portion of Xcode Playground, click the blue arrow on the left, then see the value printed in the console (bottom portion of the screen).

Variables

In most programming languages, including Swift, values can be saved to variables. Unlike in math class, where we would use x or y and a number, variables in programming are much more flexible. Below are three variables that were used for the Reminders App:

var listName = "Reminders"
var totalReminders = "five"
var reminder = "Take the dogs for a walk"

To define a variable, we use the var keyword, followed by a name we choose for the variable. Notice that all of the variables start with a lowercase letter. If you’re making a variable name that has two words, uppercase the first letter of the second word. This is called camelCase.

After naming the variable, we use the = sign to show what value the variable will hold.

We can now print any of these variables we have defined out to the console. The example below defines three variables, but only one will be logged to the console.

var listName = "Reminders"
var totalReminders = "five"
var reminder = "Take the dogs for a walk"

print(listName)

Try It: Strings and Variables

Complete the following in the same Playground. You should type your code in the Swift editor of the Playground, and see the results in the console below.

Declare a variable for each prompt below. Then, print it out to the console.

  • A variable called favoriteColor that holds your favorite color
  • A variable called pet that holds the name of a pet
  • A variable called friend that holds the name of a friend
  • A variable called goal that holds one of your 2020 goals. Remember, you can include spaces in a string!
  • A variable called hobby that holds one of your hobbies

Keywords are special, reserved words in the language. Every programming language has them. Xcode is helpful because it shows all keywords in pink.

Re-assigning Variables

Sometimes, things in life change! We might change our names, move cities, our ages will almost definitely change, etc. In the Reminders App, users have the option to change the name of a list.

Swift gives us the ability to re-assign a variable so that its value can change. Here is the syntax:

var listName = "Reminders"

listName = "Monday To-Dos"
print(listName)
//=> Monday To-Dos

Notice that when we re-assign a variable, we do not use the keyword var.

Constants

If we want to store information that we know will NEVER change, use the let keyword to declare a constant.

let name = "Karlie"

We can still access the string “Karlie” anytime, we just can’t re-assign it.

Tun & Talk: Uses for Constants

With your partner, come up with 3-4 real life uses for a constant, a piece of data that will never change.

Are there any places where a constant would be appropriate for the Reminders App?

Declaring Variables with No Value

In other languages, you may have seen variables declared without being assigned a value. To do that in Swift, we have to tell the program what data type it should be.

var name : String
var lastNumber : Int

Maybe I don’t know the name or last number yet, but Swift requires that I declare which type of data will later be stored in it. var name alone will NOT work.

Once I do have the data I’d like to store, I can re-assign the variable like this:

var name : String
var lastNumber : Int

name = "Karlie"
lastNumber = 78

String Interpolation

We can also include variable data in a sentence. This is called interpolation:

var listName = "Reminders"
var totalReminders = "five"

print("There are \(totalReminders) items on the \(listName) list.")
//=> There are five items on the Reminders list.

The computer reads anything inside of the \( ) as Swift code. In the code snippet above, the string "There are " was printed, then the program saw \( and read totalReminders as a variable. Instead of printing out the word totalReminders, it substituted it’s stored value of “five” instead. Once the program read the closing ), it printed out " items on the ", then continued with the same process for the second variable.

Try It: Strings

Declare the following variables in your Playground:

var first = "Karlie"
var last = "Kloss"

Use string interpolation to complete the following:

  1. Output the string "KarlieKloss".
  2. Output the string "KlossKarlie".
  3. Output the string "Karlie Kloss".
  4. Output the string "Kloss Karlie Kloss Karlie".
  5. Output the string "I love Karlie".

Numbers

We will use two kinds of numbers - Integers and Doubles. The math operations we use all the time can be used on both of these. Also, the Order of Operations applies to math in code!

Integers

Like we saw with strings above, we can also store Integers in variables.

var totalReminders = 5
var today = 2
var scheduled = 3
var flagged = 1

We can also re-assign variables that store numbers. In the Reminders App, this is how the program keeps track of the total number of reminders on a given list.

var totalReminders = 0

// The line below re-assigns points to its previous value (0) plus 1.
totalReminders = totalReminders + 1
// => 1

// The line below re-assigns points to its previous value (1) plus 1.
// It is a shortcut that does the exact thing as the example above!
totalReminders += 1
// => 2

Turn & Talk: Incrementing Numbers

Incrementing numbers like what we just looked at above is something developers do very frequently.

With your partner, brainstorm some examples of numbers incrementing or decrementing in real apps that you use.

Takeaways:

  • On a users birthday, an app should increment their age
  • Social media apps use incrementing to keep track of the number of likes, replies, followers, etc.
  • Apps that involve scheduling - calendar events, flights, live video classes, etc. usually have a countdown timer to keep the user informed on the amount of time until something will happen

Integers in Action

Like we did with strings, we can interpolate with variables that hold numbers.

var listName = "Reminders"
var totalReminders = 5

totalReminders += 1

print("There are \(totalReminders) items on the \(listName) list.")
//=> There are 6 items on the Reminders list.

We can do math with numbers in Swift! The same math operators you are used to from math-class work here.

3 + 5
//=> 8

12 / 2
//=> 6

18 - 8
//=> 10

We can also use parenthesis, and the Order of Operation holds true here as well.

(3 + 2) * 8
// 5 * 8
//=> 40

We can also use math on variables if those variables hold numbers.

var name = "Karlie"
var tinsOfKookies = 1200
var mealsDonatedPerTin = 10

var mealsDonated = tinsOfKookies * mealsDonatedPerTin;

print(mealsDonated);
//=> 12,000

print("Because \(tinsOfKookies) tins of kookies were purchased during Fashion's Night Out, \(mealsDonated) meals were donated to starving children all over the world. Thanks, \(name)!")
//=> "Because 1200 tins of kookies were purchased during Fashion's Night Out, 12,000 meals were donated to starving children all over the world. Thanks, Karlie!"

Try It: Integers & Operators

Start with these numbers:

var januaryAvg = 12
var marchAvg = 65
var novemberAvg = 31
var julyAvg = 98
  1. Write code to find the average of these four temperatures.
  2. Find the average yourself using paper or a calculator. Is your answer different than you found with Swift? Why might that be?
  3. Say you have the operation januaryAvg + marchAvg * novemberAvg / julyAvg. What result do you get out from Swift? What other outputs can you get out by adding one or more pairs of parentheses to the expression?

Medium Challenge: Find the answer to this problem using Swift: On average, there are 24 scholars at each Kode With Klossy camp this year. If there are 36 camps taking place, about how many scholars are attending in total? Print out to the console your answer in a complete sentence.

Doubles

In the Try It section above, Swift calculated the average of the four temperatures to be 51, even though we can verify on a calculator that the more precise answer is 51.5. This is because if we ask Swift to perform an operation on two Integers, it will result in an Integer. From our example above, we can see that it rounded down.

What if we wanted a more precise answer? We would need to use a Double.

Swift gives you two data types with which to store numbers that have a decimal - Floats and Doubles. They can be positive or negative. Examples would be 1.1, 42.45, 3.14, -123786234.64. There are some technical differences between the two, but for our purposes this summer, if you ever need a decimal use a Double because you’ll get more accuracy that way.

var januaryAvg = 12
var marchAvg = 65
var novemberAvg = 31
var julyAvg = 98

var total = (januaryAvg + marchAvg + novemberAvg + julyAvg)

Double(total) / 4.0
=> 51.5

On the last line of code in the snippet above, we changed two key things:

  1. We converted the total of the 4 temperatures into a double with the Double(total) syntax. That changed 206 to 206.0. It seems like a small difference to us, but it is a big difference to Swift.
  2. We divided by 4.0, a Double, instead of 4, an Integer. We did this for consistency.

We can’t use all math operations on a double and an integer. Why? They are technically different data types. Even though they all look like numbers to us - they are stored differently. To use most math operations on an Integer with a Double, we would convert the integer into a double.

Example:

var integer = 4
var double = 5.0

integer * double --> ERROR
Double(integer) * double --> 20.0

NOTE: Some math operations will work with a mix (for example: 206.4 / 4), but since that doesn’t work on most operations, it’s standard to always use the same data type when performing any math operation.

Swift Data Types

Let’s take a few minutes to practice these fundamentals - we will use this knowledge every time we work on a project from here on out!

Practice: Data Types

Mild: Variables & Constants

For each item on the list below, determine if it should be stored as a variable or constant. Be ready to explain your thinking.

  • name
  • address
  • cityBornIn
  • gradeLevel
  • birthday
  • age
  • eyeColor
  • favoriteColor

Now, declare variables or constants for each of the items listed above, and assign an appropriate value.

Lastly, use string interpolation to write at least 3 different sentences about yourself, using at least one variable in each sentence.

Mild: Declaring with No Value

For each item on the list below, determine what data type would be appropriate.

  • collegeAttended
  • numberOfPlacesTraveled
  • bestFriend
  • numberOfCitiesLivedIn

Now, declare variables or constants for each of the items listed above, but don't assign them a value yet.

Medium: How Much Do I Get Paid?

Find the answer to this problem using Swift:

Karina earns $10.25 per hour at her job at Express. If she worked 20 hours last week, how much should she get paid? Print a complete sentence out with the total.

Spicy: String Compression

There's a silly compression algorithm that outputs the first letter, the number of letters in the middle, and the last letter. So for the string Klossy it'd output K4y or scholar would be s5r.

Can you write code to implement that? Hint: You'll probably need to use your research skills to find something that will help!