SwiftUI ile Full Timer Uygulaması
Tarih: 16/11/2025
Bu dökümantasyonda, SwiftUI kullanarak tamamen işlevsel bir timer (geri sayım veya kronometre) uygulaması nasıl yapılır anlatılmaktadır.
1. Gerekli Import
Bu import'un tüm dosyaların en başında olmalıdır
import SwiftUI
2. TimerViewModel Oluşturma
Timer’ın mantığını ViewModel içinde tutmak daha düzenli olur. Burada bir ObservableObject sınıfı ile timer verilerini yönetiyoruz.
class TimerViewModel: ObservableObject {
@Published var secondsElapsed: Int = 0
@Published var isRunning = false
var timer: Timer? = nil
func start() {
guard !isRunning else { return }
isRunning = true
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
self.secondsElapsed += 1
}
}
func pause() {
isRunning = false
timer?.invalidate()
timer = nil
}
func reset() {
pause()
secondsElapsed = 0
}
func formattedTime() -> String {
let hours = secondsElapsed / 3600
let minutes = (secondsElapsed % 3600) / 60
let seconds = secondsElapsed % 60
return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
}
3. TimerView Oluşturma
SwiftUI view’ı ile timer arayüzünü oluşturuyoruz:
struct TimerView: View {
@StateObject private var viewModel = TimerViewModel()
var body: some View {
VStack(spacing: 40) {
Text(viewModel.formattedTime())
.font(.system(size: 60, weight: .bold, design: .monospaced))
.padding()
HStack(spacing: 30) {
Button(action: {
viewModel.start()
}) {
Text("Start")
.font(.title2)
.padding()
.background(Color.green.opacity(0.7))
.foregroundColor(.white)
.cornerRadius(10)
}
Button(action: {
viewModel.pause()
}) {
Text("Pause")
.font(.title2)
.padding()
.background(Color.orange.opacity(0.7))
.foregroundColor(.white)
.cornerRadius(10)
}
Button(action: {
viewModel.reset()
}) {
Text("Reset")
.font(.title2)
.padding()
.background(Color.red.opacity(0.7))
.foregroundColor(.white)
.cornerRadius(10)
}
}
}
.padding()
}
}
4. App Entry Point
TimerView’ı ana uygulama dosyasında çağırabilirsiniz:
@main
struct TimerApp: App {
var body: some Scene {
WindowGroup {
TimerView()
}
}
}
5. Uygulamanızı Çalıştırın
Artık uygulamanızı bitirdiniz şimdi uygulamanızı çalıştırabilirsiniz.