0,381 – Reaktionstest

Inhaltsverzeichnis

Ich habe vor Kurzem meine erste App mit dem Namen „0,381“ im App Store veröffentlicht. Mithilfe der App kann man einen Reaktionstest durchführen. Nachdem man den Reaktionstest startet, wird der Bildschirm innerhalb einer bis fünf Sekunden blau. Dann gilt es so schnell wie möglich auf diesen zu tippen. Das passiert insgesamt fünfmal. Im Anschluss kann man die Reaktionszeiten sehen, die man erzielt hat. Jede Reaktionssession wird zudem gespeichert und man kann die vergangenen Ergebnisse in einer Tabelle anschauen und vergleichen. Die App kostet 0,99 € und ist im App Store unter folgendem Link verfügbar. Die App ist mit iPhone, iPad und M1 Macs kompatibel. Im Folgenden erkläre ich, was ich unter anderem verwendet habe, um die App zu programmieren.

Was wird zum Speichern genutzt?

Core Data

In der App nutze ich Core Data zum Speichern. Dabei habe ich folgende Klasse. Die Klasse hat zwei Attribute.

				
					@objc(ReaktionsSession)
public class ReaktionsSession: NSManagedObject {
    @NSManaged public var reaktionszeiten: [Double]?
    @NSManaged public var timestamp: Date?
}

				
			

Die Reaktionszeiten werden in einem Double Array gespeichert. Dabei werden die Sekunden gespeichert. Ein Beispiel einer Reaktionszeit ist auch der Name „0,381“ Sekunden. Die Sekunden werden mit mehr als drei Nachkommastellen angezeigt. Angezeigt, werden aber nur drei Nachkommastellen.

Methoden

Es gibt drei Methoden, die ich mit dieser Klasse nutzen kann. Die Methoden ermöglichen es Objekte hinzuzufügen, Objekte zu entfernen und Objekte zu speichern.

				
					static func deletObject(object: ReaktionsSession() {}
static func addObject(reactionTimes: [Double] {}
private static func saveViewContext {}
				
			

Diese sind Methoden der Klasse „PersistenceCountroller“. Mit dieser Klasse kann ich auf den Container zugreifen, in dem alle Objekte der Klasse „ReaktionsSession“ gespeichert sind. Der Vorteil bei Core Data liegt darin, dass Objekte direkt gespeichert werden können. 

Wie werden die zeitlichen Abstände erzeugt?

Scheduled Timer

Zum Erzeugen der zeitlichen Abstände habe ich einen Timer genutzt. Der erste Timer wird durch die Methode „.onAppear(perform: )“ aufgerufen. Wenn der Timer abgelaufen ist, wird der Button aktiviert und der Bildschirm wird blau. In diesem Moment läuft kein Timer mehr. Wenn der User dann auf diesen blauen Bildschirm drückt, wird der Button wieder ausgeschaltet und der Bildschirm wird wieder weiß. Gleichzeitig wird beim Drücken auf den Button ein neuer Timer gestartet. Der Timer nutzt immer eine zufällige Zeit. Diese wird durch eine berechnete Variable erzeugt. Der Timer sieht folgendermaßen aus.

				
					var randomTimeRange: Double {
	Double.random(in: 1...5)
}

Timer.scheduledTimer(withTimeInterval: randomTimeRange, repeats: false) { _ in
	if counter > 0 {
		// weiteren Test starten
	}
	else {
		// nächsten Bildschirm anzeigen
	}
}
				
			

Wie sind die Views aufgebaut?

Tab View

Es gibt einen „Tab View“. Der erste Tab beinhaltet den Reaktionstest, der zweite Tab enthält die Liste mit den gespeicherten Reaktion-Sessions.

 

Full Screen Cover

Der erste Tab nutzt einen View mit einem Button. Der Button aktiviert ein „fullScreenCover“. Alles wird also über den aktuellen View gelegt. Dieses „Cover“ enthält einen View mit einem „if, else if, else“ Statement. Dieses zeigt in Phase eins den Test, in Phase zwei „Der Test ist beendet“ und in Phase drei die Auswertung. Mit einem Button in der Auswertung können die Daten gespeichert werden und das „Cover“ wird deaktiviert. Das war der gesamte Aufbau des ersten Tabs.

Liste

Der zweite Tab zeigt die Ergebnisse in einer Liste. Dazu ist auf der obersten Ebene ein „NavigationView“, gefolgt von einer „List“, gefolgt von einer „ForEach“ Schleife, gefolgt von einem „NavigationLink“. Somit ist es möglich die einzelnen Zeilen der Liste zu öffnen und die genauen Daten anzeigen zu lassen.

Was für Helfer Methoden wurden verwendet?

Ich hatte zwei Helfer-Klassen. Einen „Berechnungs-Helfer“ und einen „Datums-Helfer“.

Die Helfer Methoden sind „public static func“ um sie direkt aufrufen zu können, ohne vorher ein Objekt von der Klasse erstellen zu müssen.

Berechnungshelfer

Der Berechnungshelfer hat zwei Methoden. Erstens um den durchschnitt eines Double-Arrays zu berechnen und das Ergebnis auf drei Nachkommastellen zu runden. Zweitens zum Runden eines Doubles auf drei Nachkommastellen.

 

Datumshelfer

Der Datumshelfer hat eine Methode. Diese ist zum Formatieren eines Datums. Das Datum wird so formatiert, dass das Datum wie in folgendem Beispiel angegeben wird. „22.07.21, 09:23“

 

Weiteres

Das waren so weit die wichtigsten Dinge an diesem Projekt. Wenn du dich auch für Swift, SwiftUI oder Core Data interessiert oder noch eine Frage zu diesem Projekt hast, kannst du mir gerne eine E-Mail unter simon@simonhesse.com senden.

 

Mich benachrichtigen, wenn es einen neuen Beitrag gibt.

 
 
Share on whatsapp
WhatsApp
Share on email
Email
Share on linkedin
LinkedIn
Share on facebook
Facebook