Last active
November 11, 2023 08:34
-
-
Save appfrosch/36abb4d5a50f2e5b748b8a18e3e367c4 to your computer and use it in GitHub Desktop.
Simple square grid showing coloured circles depending on their type
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// ContentView.swift | |
// poc-bolderGrid | |
// | |
// Created by Andreas Seeger on 10.11.2023. | |
// | |
import SwiftUI | |
struct ContentView: View { | |
@State private var holdsModel = GridModel.mock | |
var body: some View { | |
if holdsModel.validGrid { | |
Grid { | |
ForEach(0..<holdsModel.length, id: \.self) { row in | |
GridRow { | |
ForEach(0..<holdsModel.length, id: \.self) { column in | |
Button( | |
action: { | |
// TODO: implement action here | |
holdsModel.grid[row][column].holdType = | |
holdsModel.grid[row][column].holdType == .regular ? .special : .regular | |
}, label: { | |
Circle() | |
.foregroundStyle(holdsModel.grid[row][column].holdType.color) | |
}) | |
} | |
} | |
} | |
} | |
.padding() | |
} else { | |
ContentUnavailableView("Invalid Grid", systemImage: "xmark") | |
} | |
} | |
} | |
#Preview { | |
ContentView() | |
} | |
enum HoldType { | |
case regular, special | |
var color: Color { | |
switch self { | |
case .regular: | |
.blue | |
case .special: | |
.red | |
} | |
} | |
} | |
struct Hold { | |
let rowPosition: Int | |
let columnPosition: Int | |
var holdType: HoldType | |
} | |
struct GridModel { | |
var grid: [[Hold]] | |
var length: Int { | |
grid.count | |
} | |
var validGrid: Bool { | |
let rows = grid.count | |
print("Rows:", rows) | |
let columnsSum = grid.reduce(0, { partialResult, columns in | |
let count = columns.count | |
print("Column count:", count) | |
return partialResult + count | |
}) | |
print("Coulum sum:", columnsSum) | |
let columnSquareRoot = Double(sqrt(Double(columnsSum))) | |
print("Columns:", columnSquareRoot) | |
let isValid = Double(rows) == columnSquareRoot | |
print("Valid:", isValid) | |
return isValid | |
} | |
} | |
extension GridModel { | |
static let mock = GridModel( | |
grid: [ | |
[ | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .special), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular) | |
], | |
[ | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .special), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular) | |
], | |
[ | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular) | |
], | |
[ | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .special), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular), | |
Hold(rowPosition: 0, columnPosition: 0, holdType: .regular) | |
] | |
] | |
) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment