Enums and Structs

Enums and Structs
{
case red
case blue
case green
}

import UIKit

enum PrimaryColor {
	case red
	case blue
	case yellow
}
enum Aunties {
	case Aime, Billie, Diane, Gail, Janie, Pam
}
enum AmericanLeagueWest: String {
	case As = "Oakland"
	case Astros = "Houston"
	case Angels = "Los Angeles"
	case Mariners = "Seatle"
	case Rangers = "Arlington"
}
enum CaliforniaPark {
	case Yosemite, DeathValley, Lesson, Sequoia
}

var warning = ""
var destination = CaliforniaPark.Yosemite

switch destination {
	case.Yosemite:
		warning = "Beware of agressive bears!"
	case.DeathValley:
		warning = "Beware of dehydration!"
	case.Lasson:
		warning = "Watch out for boiling pools!"
}
struct PictureFrame {
	var width = 5
	var height = 7
	var thickness: Double = 1.5

	var area: Int {
		get {
			return width * height
		}
	}
}
var frame = PictureFrame(width: 3, height: 5, thickness: 0.5)
var frameForMom = frame
frameForMom.width = 5
frameForMom.height = 7
frame.width
frame.height

class ClassyPictureFrame {
	var width = 5
	var height = 7
	var thickness: Double = 1.5

	var area: Int {
		get {
			return (width * height) / 2
		}
	}

	init(width: Int, height: Int, thickness: Double){
		self.width = width
		self.height = height
		self.thickness = thickness
	}
}

var classyFrame = ClassyPictureFrame(width: 3, height: 5, thickness: 0.5)
var classyFrameForMom = classyFrame
var darkColors = Laundry(temperature: 70, speed: "medium")
var darkDelicates = darkColors
darkDelicates.speed = "low"
darkColors.speed
 Triangle {
 	let angles = [30, 60, 90]
 	let sides = [3,4,5]
 }

 UIImagePickerControllerSourceType : Int {
 	case PhotoLibrary
 	case Camera
 	case SavedPhotosAlbum
 }

 struck Name {
 	var firstName: String
 	var lastName: String
 }

 enum Subject {
 	case Math
 	case English
 	case Spanish
 	case Science
 }

Classes, Properties, and Methods

import UIKit

class Movie {
	let title: String
	let director: String
	let releaseYear: Int

	init(title: String, director: String, releaseYear: Int){
		self.title = title
		self.director = director
		self.releaseYear = releaseYear
	}
}
class MovieArchive {
	var movies:[Movie]

	func filterByYear(year:Int) -> [Movie]{
		var filteredArray = [Movie]()
		for movie in self.movies {
			if movie.releaseYear == year {
				filteredArray.append(movie)
			}
		}
		return filteredArray
	}

	init(movies:[Movie]){
		self.movies = movies
	}
}
import UIKit

class ViewController: UIViewController {

	var count = 0
	var label:UILabel!

	override func viewDidLoad(){
		super.viewDidLoad()

		// Label
		var label = UILabel()
		label.frame = CGRectMake(150, 150, 60, 60)
		label.text = "0"
		self.view.addSubview(label)
		self.label = label
		// Button
		var button = UIButton()
		button.addTarget(self, action: "incrementCount", forControlEvents: UIControlEvents.TouchUpInside)
		self.view.addSubview(button)
		button.frame = CGRectMake(150, 250, 60, 60)
		button.setTitle("Click", forState: .Normal)
		button.setTitleColor(UIColor.blueColor(), forState:.Normal)
	}

	@IBAction func incrementCount(){
		self.count++
		self.label.text = "\(self.count)"
	}
}

Access Control
Level, Class, App/Framework, Work
public: Y Y Y
internal: Y Y N
private Y N N

class Movie {
	let title: String
	let director: String
	let releaseYear: Int

	init(title: String, director: String, releaseYear: Int){
		self.title = title
		self.director = director
		self.releaseYear = releaseYear
	}
}

var thursdayNightMovie = Movie(title: "Point Break", director: "Kathryn Bigelow", releaseYear: 1991)
thursdayNightMovie.title

Functions

Global Functions
the functions print, min, and abs are a few examples of global functions.

print("I'm a global function!", terminator:"")

var initialPrice = 50
var bestOffer = 45
var finalPrice = min(bestOffer, initialPrice)

var negativeSeven = -7
abs(negativeSeven)

Anatomy of a function

let array = ["A", "13", "B", "5", "87", "t", "41"]

class Arithmetic {
	func sumOfStrings(aBunchOfStrings: [String]) -> Int {
		let array = aBunchOfStrings
		var sum = 0
		for string in array {
			if Int(string) != nil {
				let intToAdd = Int(string)!
				sum += intToAdd
			}
		}
		return sum
	}
}

func functionName (parameterName: parameterType) -> returnType
statements to execute
return object
}

let stringToReverse = "Mutable or Immutable? That is the question."

func reverseString(stringToReverse: String){
	var reversedString = ""
	for character in stringToReverse.characters {
		reversedString = "\(character)" + reversedString
	}
	print(reversedString)
}

func functionName(externalParamName localParamName: paramType) -> returnType {
statements to execute
return object
}

func firstCharaterOf(word: String) -> Character {
	return word[word.startIndex]
}

firstCharacterOf("Mom")
func placeFirstLetterLast(var myString: String) -> String {
	myString.append(firstCharacterOf(word: myString))
	myString.removeAtIndex(myString.startIndex)
	return "placeholder"
}

placeFirstLetterLast("Mom")
class MovieArchive {
	func filterByYear(year: Int, movies: Dictionary<String, Int> -> [String]{
		var filteredArray = [String]()
		for (movie, releaseYear) in movies {
			if year == releaseYear{
				filteredArray.append(movie)
			}
		}
		return filteredArray
	})
}

var aiThemedMovies = ["Metropolis":1927, "2001:A Space Odessey":1968, "Blade Runner":1982, "War Games":1983, "Terminator":1984, "The Matrix":1999, "A.I.":2001, "Her":2013, "Ex Machina":2015]

var myArchive = MovieArchive()
myArchive.filterByYear(2013, movies: aiThemedMovies)

Switch statement

var birthYear = 1992

if birthYear == 1992 || birthYear == 1980 || birthYear == 1968 {
	println("You were born in the year of the monkey.")
} else if birthYear == 1991 || birthYear == 1979 || birthYear == 1967 {
	println("You were born in the year of the goat")
} else {
	println("You were born in some other animal's year.")
}

switch birthYear {
	case 1992, 1980, 1968:
	println("You were born in the year of the monkey.")
	case 1991, 1979, 1967:
	println("You were born in the year of the goat")
	default:
	println("You were born in some other animal's year.")
}

While loops

While loops take the form:
while condition {
statement
}

var timer = 10
while timer > 0 {
	--timer
}

var beerVolume = 12.0
var sip = 0.3

while beerVolume > 0 {
	print("Cheers!")
	beerVolume -= sip
} 

Repeat-While loop
repeat {
statement
} while condition

repeat {
	--timer
} while timer > 0

repeat {
	print("Cheers")
	beerVolume -= sip
} while beerVolume > 0

Sets

var cutlery: Set = ["fork", "knife", "spoon", "spoon"]
var flowers:Set<Character> = ["","",""]

var utensils = Set<String>()
var trees = Set<Character>()

Control Flow
-for loop statement
-switch statement
-if else statement

For-in loops take the form:

for item in Collection {
statements to execute on each item
}

import UIKit
import Foundation

for var index = 99; index > 0; --index {
	print("\(index) bottles of beer on the wall. \(index) bottles of beer. Take one down, pass it around ...")
}
var demoString = "Swift enumeration is so fast!"
for character in demoString.characters {
	print(character)
}
let intArray = [7, 21, 25, 13, 1]
var sum = 0
for value in intArray {
	sum += value
}
var movieDict = ["star wars":"Geroge Lucas", "Point Break": "Kathryn Biegelow", "When Harry Met Sally": "Rob Reiner", "The Dark Knight": "Christopher Nolan"]

for (movie, director) in movieDict {
	print("\(director) directed \(movie)")
}

var animalGroupsDict = ["whales":"pod", "geese":"flock", "lions":"pride"]
for (animals, animalGroup) in animalGroupsDict {
	print("Many \(animals) form a \(animalGroup).")
}

Dictionary

Dictionary initialization

var groupsDict = [String:String]()
var animalGroupsDict = ["whales":"pod", "geese":"flock", "lions":"pride"]

var averageLifeSpanDic = [String:Range<Int>]()
var lifeSpanDic = ["African Grey Parrot":50...70, "Tiger Salamander":12...15, "Bottlemose Dolphin":20...30]

Dictionary operation

animalGroupsDict["crows"] = "murder"
animalGroupsDict["monkey"] = "troop"
animalGroupDict.count
println(animalGroupDict)

animalGroupDict["crows"] = nil
animalGroupDict

animalGroupsDict["monkeys"] = "barrel"
var group = animalGroupsDict.updateValue["gaggle", forKey: "geese"]
group.dynamicType

animalGroupsDict.updateValue("crash", forKey: "rhioceros")
println(animalGroupsDict)

if let groupOfWhales = animalGroupsDict["whales"]{
	println("We saw a \(groupOfWhales) of whales from the boat.")
} else {
	println("No value found for that key.")
}

Collections

[String:Character]()
lessons.append(“Collections”)

Set, Array, Dictionary

import UIKit
import Foundation

var numbers = Array<Double>()
var moreNumbers = [Double]()
moreNumbers = [85.0, 90.0, 95.0]

let differentNumbers = [97.5, 98.5, 99.0]
differentNumbers = moreNumbers + differentNumbers

var circuit = [livingRoomsSwitch, kitchenSwitch, bathroomSwitch]
var roadTripMusic = ["Neil Young", "Kendrick Lamar", "Flo Rida", "Nirvana"]

roadTripMusic.append("Rae Sremmurd")
roadTripMusic.insert("Dej Loaf", atIndex: 2)
roadTripMusic.removeIndex(3)
roadTripMusic.insert("Keith Urban", atIndex: 3)
roadTripMusic.count

let musician = roadTripMusic[2]

The Optional Data Type

Int, String, UIButton, AnyObject

Exclamation!
declare -var x:Int!
unwrap -x!

let w = Int("123")
w * 2

class BetterViewController: UIViewController {
	//var myButton: UIButton
}
import UIKit

class ViewController: UIViewController {
	var button:UIButton!

	override func viewDidLoad(){
		super.viewDidLoad()
		var title = button.titleForState(UIControlState.Normal)
	}
}
import UIKit

class Beverage {
	var category:String
	init (category: String){
		self.category = category
	}
}

class HotDrink: Beverage {
	var pairing:String

	init(category: String, pairing: String){
		self.pairing = pairing
		super.init(category: category)
	}
}

class ColdDrink: Beverage {
	var vessel:String

	init (category: String, vessel: String){
		self.vessel = vessel
		super.init(category: category)
	}
}