DEV Community

BC
BC

Posted on

Learn SwiftUI (Day 11/100)

Swift

  • private / fileprivate / public
  • static, self and Self
import Cocoa

// ## private

struct BankAccount {
    private var funds = 0
}

/*
 * Use private for “don’t let anything outside the struct use this.”
 * Use private(set) for “let anyone read this property, but only let my methods write it.”
 * Use fileprivate for “don’t let anything outside the current file use this.”
 * Use public for “let anyone, anywhere use this.”
 */

// ## static variable and function

struct School {
    static var studentCount = 0
    static func add(student: String) {
        print("\(student) joined the school.")
        studentCount += 1
    }
}

// ## self and Self
/*
 To access static code from non-static code,
 always use your type’s name such as School.studentCount.
 You can also use Self to refer to the current type.
 */

// ## singleton

struct Employee {
    let username: String
    let password: String

    static let example = Employee(username: "abc", password: "xyz")
}

// ## Check point

/*
 create a struct to store information about a car,
 including its model, number of seats, and current gear,
 then add a method to change gears up or down.
 Have a think about variables and access control:
 what data should be a variable rather than a constant,
 and what data should be exposed publicly?
 Should the gear-changing method validate its input
 */

struct Car {
    let model: String
    let numberOfSeats: Int
    private var currentGear: Int

    init(model: String, numberOfSeats: Int) {
        self.model = model
        self.numberOfSeats = numberOfSeats
        self.currentGear = 0
    }

    mutating func gearUp() -> Bool {
        if self.currentGear == 6 {
            return false
        }
        self.currentGear += 1
        return true
    }

    mutating func gearDown() -> Bool {
        if self.currentGear == 0 {
            return false
        }
        self.currentGear -= 1
        return true
    }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)