Skip to content
Shop

CommunityJoin Our PatreonDonate

Sponsored Ads

Sponsored Ads

Swift Syntax 10.2.24

Coming Soon!

Data Types

Int - integer

var age: Int 24;

Float - precision of 6 decimal places

0.82819281927190

Double - precision of 15 decimal places

var percentage: Double = 0.81

String - text

var welcomeMessage: String = "Welcome to the Course!

Bool - boolean type

var isOn: Bool = false

Custom type - using classes

var joe: Person = Person(firstName: "Joe")

Swift has type inference. Swift can infer what type you want without you having to specify the type.

var year = 2024

Variables & Constants

Variables can be changed, but constants cannot be changed.

The following will produce an error

swift
let GRAVITATIONAL_CONSTANT = 9.81
GRAVITATIONAL_CONSTANT = 8.09
swift
let GRAVITATIONAL_CONSTANT = 9.81
var m1 = 20
var m2 = 2000
var r = 5
var F = GRAVITATIONAL_CONSTANT * ((m1*m2)/Int(pow(Double(r), Double(2))))
swift
var width = 0.0, height = 0.0, depth = 0.0
swift
var yourName: String
yourName = "Tutorial Doctor"
swift
var r, g, b: Double

Data Structures

Array

swift
var grocerySet: [Int]
var grocerySet = ['milk','eggs','cheese','bread']

print(grocerySet[0])
grocerySet.append('pizza')
grocerySet.insert('water', at: 2)
grocerySet.sort()
grocerySet.reverse()
grocerySet.shuffle()

Set

A set is unordered and cannot have duplicate values. Better performance because you don't have to search a whole array for a value because there are no duplicates. So looking up a value is constant time.

var grocerySet: Set<Int> = []

You can cast an array to a set. The duplicated values will be removed.

var grocerySet = Set(groceryList)

swift
grocerySet.insert('ham')
grocerySet.contains('pizza')
print(grocerySet)

Dictionary

Dictionaries have constant time lookup like sets.

swift
// A dictionary of words and their associated definitions
let wordDictionary: [String: String] = [
    "a": "the first letter of the english alphabet", 
    "aa": "basaltic lava having a rough, broken surface", 
    "aaa": "a small battery that is used in small electronic devices",
]

print(wordDictionary["a"])

Statements

swift
var name = "TutorialDoctor"
print(name)
swift
//Semicolon required for same-line statements
let cat = "🐱"; print(cat)

Assertions, Preconditions Optionals

Conditional Statements

If, Else If, Else

swift
var cakeTemperature = 80

if cakeTemperature == 100{
    print("Take the cake out of the oven")
}
else if cakeTemperature < 100{
    print("Leave the cake in the oven")
}
else{print("The cake is still heating up")}

Switch

For switch statements, you have to handle all cases.

swift
var cakeTemperature = 80

switch cakeTemperature {
    case 100:
    print("Take the cake out of the oven")
    case ..<100:
    print("Take the cake out of the oven")
    default:
    print("The cake is still heating up")
}

Loops

for i in 0...6{
    print(i)
}

for i in 0..<6{
    print(i)
}

Use an underscore if you aren't using the iterator in the loop.

swift
var randomIntArray: [Int] = []

for _ in 0..<15{
    let randomInteger = Int.random(in: 0...100)
    randomIntArray.append(randomInteger)
}
print(randomIntArray)
swift
let names = ["robert","susan","joe","cynthia"]
for name in names{
	print(name)
}

For-In Loop While Loop Repeat-While Loop

Functions

swift
func add(number1: Int, number2: Int) -> Int{
    return number1 + number2
}
print(add(number1: 2,number2: 3))

To make the code more readable you can use an argument label. The argument label is used when calling the function (at the call site).

swift
func add(number1: Int, to number2: Int) -> Int{
    return number1 + number2
}
print(add(number1: 2, to: 3))

to is the argument label (external label) , and number2 is a parameter label (internal label). to could be called whatever you want. If you don't have an argument label, the parameter label will be used.

Closures

A closure is like an anonymous function (arrow function) in Javascript.

A simple closure

swift
var greet = { print("Welcome") }
greet()

Passing parameters to a closure.

swift
let greeting = { (place: String) in 
    print("Welcome to \(place)") 
}
greeting("America")

Return information from a closure

swift
let greetingMessage = { (place: String) -> String in 
    return "Welcome to \(place)"
}
print(greetingMessage("India"))

Passing a closure to a function

swift
let notifyUser = { print("You are all done!") }

func processPayment(lastStep: () -> Void){
    print("Taking your payment")
    print("Processing your payment")
    lastStep()
}

processPayment(lastStep: notifyUser)

Macros

Enums

An enum (enumeration) is a group of related values. Enums help you avoid errors using strings and gives you autocomplete

swift
enum Direction{
    case north
    case east
    case south
    case west
}

You can list values on a single line.

enum Direction {case north, east, south, west}
swift
enum DayOfWeek{
    case sunday
    case monday
    case tuesday
    case wednesday
    case thursday
    case friday
    case saturday
}
swift
enum DayOfWeek{
    case sunday
    case monday
    case tuesday
    case wednesday
    case thursday
    case friday
    case saturday
}

func getHours(on day: DayOfWeek){
    if day == .sunday{
        print(20)
    }
}

getHours(on: .sunday)
swift
enum WeatherCode: String{
    case L = "Drizzle"
    case R = "Rain"
    case RW = "Rain Showers"
    case RS = "Rain/snow mix"
}

func getWeatherDescription(for code: WeatherCode){
    print(code.rawValue)
}

getWeatherDescription(for: .L)
getWeatherDescription(for: .R)
getWeatherDescription(for: .RS)

Classes

? means the attribute is optional.

swift
class Vehicle{
    var doors: Int?
    var wheels: Int?
    var has_an_engine: Bool?
    var color: String?
    var type: String?

    init(){}

    init(type: String){
        self.doors = 4
        self.wheels = 4
        self.has_an_engine = true
        self.color = ""
        self.type = type
    }
    func start(){
        print("\(type) is starting")
    }
    func stop(){
        print("\(type) is stopping")
    }
}

let nissan = Vehicle(type: "Sedan")
nissan.type
nissan.start()
nissan.stop()

let accord = Vehicle() // uses empty init
accord.type = "Benz"
accord.start()
accord.stop()

Inheritance

swift
class WaterVehicle: Vehicle{
    var mass: String?

    func float(){
        print("Floating \(self.type)")
    }

    // you can override methods
    override func start(){
        print("\(type) starting to run on water")
    }

}

let boat = WaterVehicle()
boat.type = "Submersible"
boat.start()
boat.float()

Structures, Enumerations, Generics, Protocols, Subscripts, Extensions, Optional Chaining

Structs

A struct is a value type while a class is a reference type.

The example below shows that a class is a reference type, and setting an object to another object that is a class and changing a value changes both objects' data.

swift
var car = Vehicle()
var hoopty = car
hoopty.type = "Hoopty"
print(car.type)

A struct on the other hand allows each instance to be unique.

Structs have a memberwise initializer so you don't have to create an initializer function

swift
struct Vehicle{
    var doors: Int?
    var wheels: Int?
    var has_an_engine: Bool?
    var color: String?
    var type: String?
}

Extensions

Extensions allow you to extend a type with additional functionality. Extensions are project wide, so every item will get extended. Subclasses only apply to a subclass.

swift
import UIKit

extension String{
    func removeWhitespace() -> String{
        return components(separatedBy: .whitespaces).joined()
    }
}

let alphabet = "A B C D E F G"
print(alphabet.removeWhitespace())

Access Control

Modules, Packages, Source Files

Files

Jobs

Other

Integers, Int, Uint, Floating Point Numbers, Type Safety, Numeric Literals, Numeric Type Conversion, Integer Conversion, Type aliases, Booleans, Tuples, Optionals, nil,

Resources