Skip to content

Instantly share code, notes, and snippets.

@asmallteapot
Created December 7, 2015 18:51
Show Gist options
  • Save asmallteapot/7f02bc0f83c2a7a49b4f to your computer and use it in GitHub Desktop.
Save asmallteapot/7f02bc0f83c2a7a49b4f to your computer and use it in GitHub Desktop.
A minimal generic logger class in Swift.
import Foundation
struct LoggerMessage<T> {
let date: NSDate
let value: T
}
class Logger<T> {
typealias LoggerMessageType = LoggerMessage<T>
private var mutableBuffer = Array<LoggerMessageType>()
private let bufferQueue = dispatch_queue_create("com.asmallteapot.Logger", DISPATCH_QUEUE_CONCURRENT)
func push(msg: T) {
dispatch_barrier_async(self.bufferQueue) {
self.mutableBuffer.append(LoggerMessageType(date: NSDate(), value: msg))
}
}
func removeAll() {
dispatch_barrier_sync(self.bufferQueue) {
self.mutableBuffer.removeAll()
}
}
func getAll() -> [T]? {
var allItems: [T]?
dispatch_barrier_sync(self.bufferQueue) {
allItems = self.mutableBuffer.map { $0.value }
}
return allItems
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment