-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextensions.swift
70 lines (65 loc) · 1.39 KB
/
extensions.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
typealias Velocity = Double
extension Velocity {
var kph: Velocity { return self * 1.60934 }
var mph: Velocity { return self }
}
protocol Vehicle {
var topSpeed: Velocity { get }
var numberOfDoors: Int { get }
var hasFlatbed: Bool { get }
}
struct Car {
let make: String
let model: String
let year: Int
let color: String
let nickname: String
var gasLevel: Double {
willSet {
precondition(newValue <= 1.0 && newValue >= 0.0, "New value must be between 0 and 1")
}
}
}
extension Car: Vehicle {
var topSpeed: Velocity { return 100 }
var numberOfDoors: Int { return 4 }
var hasFlatbed: Bool { return false }
}
extension Car {
init(make: String, model: String, year: Int) {
self.init(make: make,
model: model,
year: year,
color: "Black",
nickname: "N/A",
gasLevel: 1.0)
}
}
var c = Car(make: "Mercedes", model: "CLA 250", year: 2017)
print(c)
extension Car {
enum Kind {
case coupe, sedan
}
var kind: Kind {
if numberOfDoors == 2 {
return .coupe
} else {
return .sedan
}
}
}
print(c.kind)
extension Car {
mutating func emptyGas(by amount: Double) {
precondition(amount <= 1 && amount > 0, "Amount to remove must be between 0 and 1")
gasLevel -= amount
}
mutating func fillGas() {
gasLevel = 1.0
}
}
c.emptyGas(by: 0.3)
print(c.gasLevel)
c.fillGas()
print(c.gasLevel)