Stand nach Tag 1

This commit is contained in:
Ingo Rohlf 2025-10-21 09:17:48 +02:00
parent 6edf869fe8
commit 8eef26c4a4
8 changed files with 75 additions and 137 deletions

BIN
.DS_Store vendored

Binary file not shown.

View file

@ -4,6 +4,9 @@ import SwiftUI
@main
struct TheSwiftWeek: App {
var body: some Scene {
WindowGroup {
Text("Moin")
}
}
}

13
BikeView.swift Normal file
View file

@ -0,0 +1,13 @@
import SwiftUI
struct BikeView: View {
var body: some View {
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
}
}
#Preview {
BikeView()
}

View file

@ -1,3 +1,39 @@
import Playgrounds
import Foundation
let a=""
protocol Vehicle {
var name: String { get }
var color: String { get set }
}
struct Train: Vehicle {
var name: String
var color: String
var delay: Int
var content: Bike
init(
name: String = "ICE",
color: String = "white",
delay: Int = 0,
@BikeBuilder content: @escaping () -> Bike
) {
self.name = name
self.color = color
self.delay = delay
self.content = content()
}
}
struct Bike: Vehicle, CustomStringConvertible {
var name: String
var color: String
var description: String { name + " is " + color }
var price: some Equatable {
"FREE"
}
static let trek = Bike(name: "Trek", color: "green")
func emptyBasket() {
print("emptied", Date())
}
}

View file

@ -1,88 +1,18 @@
// https://carrascomolina.com
import Playgrounds
import Foundation
protocol Vehicle {
// name ist read-only
var name: String {get}
var color: String {get set}
}
protocol Garage {
associatedtype V: Vehicle
func park(vehicle: V)
}
struct BikeGarage: Garage {
func park(vehicle: Bike){
vehicle.emptyBasket()
}
}
struct Train: Vehicle {
var name: String
var color = "white"
var delay = 0 // nicht im protocol
func delayed(minutes: Int) -> Train {
var train = self
train.delay = minutes
return train
}
let makeSomeNoise = { (noise: String) -> String in
noise.uppercased()
}
var content: () -> Vehicle
}
struct ICE: Vehicle {
var name = "ICE"
var color = "white"
}
struct Bike: Vehicle, CustomStringConvertible {
var name: String
var color: String
// newValue ist ein special keyword
func emptyBasket(){
print(description + " korb ausgekippt", Date())
}
var description: String {
set { name = newValue }
get {"A \(price)€ bike called \(name) and it is \(color)." }}
static let trek = Bike(name: "Trek", color: "red" )
var price: some Equatable {
// switch (Int.random(in: 1...3)) {
// case 1:
// Double.random(in: 1000...9000)
// case 2:
// "Free"
// default:
Int.random(in: 100...900)
// }
}
}
var bike = Bike.trek
let train = Train(name: "RadZug", content: { Bike.trek })
#Playground {
// var greeting = "Hallo Playground"
// var train = Train(name:"ICE")
// bike.description
// bike.description = "Mein Rad"
// bike.description
let train = Train { Bike.trek }
// train
// train.delayed(minutes: 23)
// BikeGarage().park(vehicle: bike)
// print( bike)
// train.makeSomeNoise("huhu")
// // write code here
train.content().name
@resultBuilder struct BikeBuilder {
static func buildBlock(_ components: Bike) -> Bike {
components
}
}
#Playground {
// bike.price
// train.makeSomeNoise("Choo Choo!")
train.content.name
}

View file

@ -11,6 +11,7 @@
0CC14A892E92EEA900271E8D /* Playground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CC14A882E92EEA900271E8D /* Playground.swift */; };
FBA6FA5E2EA63EA300C373EC /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBA6FA5D2EA63EA300C373EC /* Models.swift */; };
FBA6FA602EA66C2E00C373EC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FBA6FA5F2EA66C2E00C373EC /* Assets.xcassets */; };
FBA6FA622EA76AAD00C373EC /* BikeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBA6FA612EA76AAD00C373EC /* BikeView.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@ -19,6 +20,7 @@
0CC14A882E92EEA900271E8D /* Playground.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Playground.swift; sourceTree = "<group>"; };
FBA6FA5D2EA63EA300C373EC /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = "<group>"; };
FBA6FA5F2EA66C2E00C373EC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
FBA6FA612EA76AAD00C373EC /* BikeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BikeView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -38,6 +40,7 @@
0CC14A842E92EC7A00271E8D /* App.swift */,
FBA6FA5F2EA66C2E00C373EC /* Assets.xcassets */,
0CC14A882E92EEA900271E8D /* Playground.swift */,
FBA6FA612EA76AAD00C373EC /* BikeView.swift */,
FBA6FA5D2EA63EA300C373EC /* Models.swift */,
0CC14A772E92EC4700271E8D /* Products */,
);
@ -127,6 +130,7 @@
FBA6FA5E2EA63EA300C373EC /* Models.swift in Sources */,
0CC14A892E92EEA900271E8D /* Playground.swift in Sources */,
0CC14A872E92EC7B00271E8D /* App.swift in Sources */,
FBA6FA622EA76AAD00C373EC /* BikeView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View file

@ -7,65 +7,17 @@
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "60F4FEF4-4F42-4C29-B795-B68DFA0CB921"
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Playground.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "40"
endingLineNumber = "40"
landmarkName = "ICE"
landmarkType = "14">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "1AD49130-FF07-483D-BB89-C32BFEA100E5"
uuid = "B8EA1D18-A70B-45BA-91B0-542F11641B66"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "App.swift"
filePath = "BikeView.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "4"
endingLineNumber = "4"
landmarkName = "TheSwiftWeek"
landmarkType = "14">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "85CFA9E8-BF14-4860-9D61-E8435BD1A73A"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "App.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "6"
endingLineNumber = "6"
landmarkName = "body"
landmarkType = "24">
</BreakpointContent>
</BreakpointProxy>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "560FB38F-4034-4C49-A74B-4B760E1C2FF6"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "Playground.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "10"
endingLineNumber = "10"
landmarkName = "Garage"
landmarkType = "5">
startingLineNumber = "1"
endingLineNumber = "1"
landmarkName = "unknown"
landmarkType = "0">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>