Skip to content

Commit

Permalink
🍗 :: [#16] 스톱워치 RxSwift로 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
Eunho0922 committed Dec 5, 2023
1 parent 6a71859 commit b9164e0
Showing 1 changed file with 30 additions and 51 deletions.
81 changes: 30 additions & 51 deletions Sources/MindGymKit /MindGymKit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,92 +43,71 @@ public class MindGymKit {
}

public class Stopwatch: NSObject {
var counter: Double
var timer: Timer?
var lapTimes: [Double] = []

private var counter: Double = 0.0
private var timer: Timer?
private var lapTimes: [Double] = []
private let timeSubject = PublishSubject<String>()
private let recordSubject = PublishSubject<[String]>()

public var timeUpdate: Observable<String> {
return timeSubject.asObservable()
}

override init() {
counter = 0.0
timer = nil
public var recordUpdate: Observable<[String]> {
return recordSubject.asObservable()
}

func start(label: UILabel) {
func start() {
timer = Timer.scheduledTimer(withTimeInterval: 0.035, repeats: true) { [weak self] _ in
guard let self = self else { return }
self.counter += 0.035
let minutes: String = String(format: "%02d", Int(self.counter / 60))
let seconds: String = String(format: "%02d", Int(self.counter.truncatingRemainder(dividingBy: 60)))
let milliseconds: String = String(format: "%02d", Int((self.counter * 100).truncatingRemainder(dividingBy: 100)))
let timeString = "\(minutes):\(seconds).\(milliseconds)"

DispatchQueue.main.async {
label.text = timeString
}
let timeString = self.timeString(from: self.counter)
self.timeSubject.onNext(timeString)
}
}


func stop() {
timer?.invalidate()
timer = nil
}

func reset() {
counter = 0
lapTimes.removeAll()
}

func record() {
lapTimes.append(counter)
let lapTimesString = lapTimes.map { timeString(from: $0) }
recordSubject.onNext(lapTimesString)
}

@objc private func updateCounter() {
counter += 0.035
private func timeString(from counter: Double) -> String {
let minutes: String = String(format: "%02d", Int(counter / 60))
let seconds: String = String(format: "%02d", Int(counter.truncatingRemainder(dividingBy: 60)))
let milliseconds: String = String(format: "%02d", Int((counter * 100).truncatingRemainder(dividingBy: 100)))
return "\(minutes):\(seconds).\(milliseconds)"
}
}

public class MindGymStopWatchKit {

public init () {}

public let mainStopwatch: Stopwatch = Stopwatch()

public func startTimer(label: UILabel) {
mainStopwatch.start(label: label)
public func startTimer() {
mainStopwatch.start()
}

public func stopTimer() {
mainStopwatch.stop()
}

public func resetTimer(label: UILabel) {
public func resetTimer() {
mainStopwatch.reset()
let minutes: String = String(format: "%02d", Int(mainStopwatch.counter / 60))
let seconds: String = String(format: "%02d", Int(mainStopwatch.counter.truncatingRemainder(dividingBy: 60)))
let milliseconds: String = String(format: "%02d", Int((mainStopwatch.counter * 100).truncatingRemainder(dividingBy: 100)))
let timeString = "\(minutes):\(seconds).\(milliseconds)"

DispatchQueue.main.async { [weak label] in
label?.text = timeString
}
resetRecord()
}

public func resetRecord() {
mainStopwatch.lapTimes.removeAll()
}

public func recordTime() {
mainStopwatch.lapTimes.append(mainStopwatch.counter)
printLapTimes()
}

public func printLapTimes() {
print("Lap Times:")
for (index, lapTime) in mainStopwatch.lapTimes.enumerated() {
let minutes: String = String(format: "%02d", Int(lapTime / 60))
let seconds: String = String(format: "%02d", Int(lapTime.truncatingRemainder(dividingBy: 60)))
let milliseconds: String = String(format: "%02d", Int((lapTime * 100).truncatingRemainder(dividingBy: 100)))
let lapTimeString = "\(minutes):\(seconds).\(milliseconds)"
print("\(index + 1). \(lapTimeString)")
}
mainStopwatch.record()
}
}


0 comments on commit b9164e0

Please sign in to comment.