Skip to content

Instantly share code, notes, and snippets.

@OyegokeTomisin
Last active March 31, 2021 15:41
Show Gist options
  • Save OyegokeTomisin/93c404202e5eac08e2d2db38143ded24 to your computer and use it in GitHub Desktop.
Save OyegokeTomisin/93c404202e5eac08e2d2db38143ded24 to your computer and use it in GitHub Desktop.

Revisions

  1. OyegokeTomisin revised this gist Mar 30, 2021. No changes.
  2. OyegokeTomisin created this gist Mar 30, 2021.
    174 changes: 174 additions & 0 deletions Tuesday.playground
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,174 @@
    import Foundation


    // MARK:- Extensions

    let tomiNumber: String = "08080008009"

    let car = "toyota"

    extension String {

    func addAreaCode() -> String {
    return "+234" + self
    }
    }

    tomiNumber.addAreaCode()
    car.addAreaCode()


    // MARK:- Structs VS Classes

    final class Humans {
    var name: String

    init(name: String) {
    self.name = name
    }
    }

    extension Humans {
    func eat() -> String {
    return "\(name) is eating"
    }
    }

    class Person {
    var name: String

    init(name: String) {
    self.name = name
    }
    }

    struct AnotherPerson {
    var name: String
    }

    // Adress system is called a pointer
    let personA = Person(name: "James") // XYZ
    let personB = personA // XYZ
    let personC = personB // XYZ

    personA.name
    personB.name
    personC.name

    personC.name = "James Bond"

    personA.name
    personB.name
    personC.name

    let personD = Person(name: "Tomi") // LMN
    let personE = personD // LMN


    var another = AnotherPerson(name: "Luke") // ABC
    var anotherB = another // New address

    print(another.name)
    print(anotherB.name)

    anotherB.name = "Luke Skywalker"

    print(another.name)
    print(anotherB.name)

    // MARK:- Type Casting
    var arrayOfStuff: [Any] = ["tomi", 3, 4.0]

    // Type cast - Force or Make a type to take up alternate behaviour

    let number = arrayOfStuff[1] // Any

    if let anyNumberAsInteger = number as? Int { // Cast from Any to Int {
    let convertedInteger = String(anyNumberAsInteger)
    print(convertedInteger)
    }

    if let anyNumberAsString = arrayOfStuff[0] as? String { // Cast from Any to String {
    print(anyNumberAsString)
    }

    // MARK:- Loops and String Interpolation

    // String is collection

    let greetingArray = ["how", "are", "you", "?"] // how are you ?

    var greeting = ""

    // For each
    // Map or Compact map

    for value in greetingArray {
    greeting = greeting + value
    greeting = greeting + " "
    }

    print(greeting)

    // MARK:- Getters and Setters

    class Circle {

    var diameter: Int

    var radius: Int {
    get { return calculateRadius() } // --- Fourth
    set { diameter = newValue * 2 } // --- First

    // willSet { print("I just calulated area of this shape to be \(newValue)") } // Second
    // didSet { print("I just calulated area of this shape") } // Third

    }

    init(diameter: Int) {
    self.diameter = diameter
    }

    func calculateRadius() -> Int {
    return diameter/2
    }
    }

    var shape = Circle(diameter: 40)

    shape.radius = 100

    print(shape.diameter)


    // MARK:- Optionals

    // String?, Int?, Double?, Bool?

    // Unwrapping - Safely use those data types

    // if let
    // guard let
    // Nil coalescing

    let name: String? = nil

    if let unwrappedName = name {
    print(unwrappedName)
    } else {
    print("do something if name is nil i.e if it does not have a value")
    }

    func addition() {
    guard let unwrappedName = name else {
    print("function has exited")
    return
    }
    print(unwrappedName)
    }


    addition()

    print(name ?? "Unidentified")