Search code examples
iosswiftxcodechartsrealm

How to datePicker indexing realm and drawing chart in swift3


Swift 3 , Realm, Charts


A screen has a DatePicker and BarChart

I want to

1) Pick a date 2) Indexing my realm database 3) Drawing a bar-chart

there already had a realm database


for indexing precise I separate date to YYYY~mm

class ChartsDatas: Object {
dynamic var date: Date = Date()

let dateYYYYFormat = DateFormatter()
let dateMMFormat = DateFormatter()
let dateddFormat = DateFormatter()
let datehhFormat = DateFormatter()
let datemmFormat = DateFormatter()
dynamic var dateYYYY: String = "2000"
dynamic var dateMM: String = "01"
dynamic var datedd: String = "01"
dynamic var datehh: String = "00"
dynamic var datemm: String = "00"

dynamic var count: Double = Double(0.0)

func dateLongToShort(orgDate:Date!){
    dateYYYYFormat.dateFormat = "YYYY"
    dateYYYY = dateYYYYFormat.string(from: orgDate)

    dateMMFormat.dateFormat = "MM"
    dateMM = dateMMFormat.string(from: orgDate)

    dateddFormat.dateFormat = "dd"
    datedd = dateddFormat.string(from: orgDate)

    datehhFormat.dateFormat = "hh"
    datehh = datehhFormat.string(from: orgDate)

    datemmFormat.dateFormat = "mm"
    datemm = datemmFormat.string(from: orgDate)
}

and drawing (This method is drawing newest ten datas)

    var dataEntries: [BarChartDataEntry] = []
    let visitorCounts = getVisitorCountsFromDatabase() //read realm DB here

    var xAxisCount = visitorCounts.count 
    if xAxisCount > 10{
        xAxisCount = visitorCounts.count - 10
    }
    for i in xAxisCount..<visitorCounts.count {
        let timeIntervalForDate: TimeInterval = visitorCounts[i].date.timeIntervalSince1970
        let dataEntry = BarChartDataEntry(x: Double(timeIntervalForDate), y: Double(visitorCounts[i].count))
        dataEntries.append(dataEntry)
    }

How to modify to drawing ten datas according to my chosen date

Thanks


Solution

  • I'm not sure what's going on in getVisitorCountsFromDatabase() but you can filter query results with predicate by specifying a date interval, see more in docs here: https://realm.io/docs/swift/latest/#filtering