116 lines
1.6 KiB
Swift
116 lines
1.6 KiB
Swift
import Foundation
|
|
|
|
|
|
protocol CanBreathe {
|
|
func breathe()
|
|
}
|
|
|
|
struct Animals: CanBreathe {
|
|
func breathe() {
|
|
"Animal Breathing..."
|
|
}
|
|
}
|
|
|
|
struct Person: CanBreathe {
|
|
func breathe() {
|
|
"Person breathing"
|
|
}
|
|
}
|
|
|
|
let dog = Animals()
|
|
dog.breathe()
|
|
let foo = Person()
|
|
foo.breathe()
|
|
|
|
|
|
protocol CanJump {
|
|
func jump()
|
|
}
|
|
|
|
extension CanJump {
|
|
func jump() {
|
|
"Jumping..."
|
|
}
|
|
}
|
|
|
|
struct Cat: CanJump {
|
|
func jump() {
|
|
"Cat can jump..."
|
|
}
|
|
}
|
|
|
|
let cat = Cat()
|
|
cat.jump()
|
|
|
|
protocol HasName {
|
|
var name: String { get }
|
|
var age: Int { get set }
|
|
}
|
|
|
|
extension HasName {
|
|
func describeMe() {
|
|
"Your name is \(name) and you are \(age) years old"
|
|
}
|
|
|
|
mutating func increaseAge() {
|
|
self.age += 1
|
|
}
|
|
}
|
|
|
|
struct Dog: HasName {
|
|
let name: String
|
|
var age: Int
|
|
}
|
|
|
|
var woof = Dog(name: "Woof", age: 10)
|
|
woof.name
|
|
woof.age
|
|
woof.increaseAge()
|
|
woof.age
|
|
woof.describeMe()
|
|
|
|
|
|
protocol Vehicle {
|
|
var speed: Int { get set }
|
|
mutating func increaseSpeed(by value: Int)
|
|
}
|
|
|
|
extension Vehicle {
|
|
mutating func increaseSpeed(by value: Int) {
|
|
self.speed += value
|
|
}
|
|
}
|
|
|
|
struct Bike: Vehicle {
|
|
var speed: Int = 0
|
|
}
|
|
|
|
var bike = Bike()
|
|
bike.speed
|
|
bike.increaseSpeed(by: 40)
|
|
bike.speed
|
|
|
|
func describe(obj: Any) {
|
|
if obj is Vehicle {
|
|
"Yes"
|
|
} else {
|
|
"No"
|
|
}
|
|
}
|
|
|
|
describe(obj: bike)
|
|
|
|
func increaseSpeedIfVehicle(obj: Any) {
|
|
if var vechile = obj as? Vehicle {
|
|
vechile.speed
|
|
vechile.increaseSpeed(by: 10)
|
|
vechile.speed
|
|
} else {
|
|
"something else"
|
|
}
|
|
}
|
|
|
|
increaseSpeedIfVehicle(obj: bike)
|
|
bike.speed // 40 struct is a copy type
|
|
|