swift-playground/Protocols.playground/Contents.swift
2025-01-31 09:27:46 +08:00

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