Search code examples
swiftstringbooleandateformatter

How to return convert value of type 'Date' to 'String' in swift


I want to overlap date after that return boolean.

func overLap(start1: String, end1: String, start2: String, end2: String) -> Bool {
    if start1 < end2 && start2 < end1 {
        return false
    }
    return true
}

let start1 = "2019/02/01"
let end1 = "2019/02/20"
let start2 = "2019/02/15"
let end2 = "2019/03/02"

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "yyyy/MM/dd"

let dateFromString1 = dateFormatter.date(from: start1)
let dateFromString2 = dateFormatter.date(from: end1)
let dateFromString3 = dateFormatter.date(from: start2)
let dateFromString4 = dateFormatter.date(from: end2)

let myString = formatter.String(from: )

let result: Bool = overLap(start1: dateFromString1, end1: dateFromString2, start2: dateFromString3, end2: dateFromString4)
print(result)

This is error: cannot convert value of type 'Date?' to expected argument type 'String' let result: Bool = overLap(start1: dateFromString1, end1: dateFromString2, start2: dateFromString3, end2: dateFromString4)


Solution

  • It's a classic type mismatch error. You cannot compare apples (Date) and oranges (String).

    You don't need to create Date instances. Compare the strings with the numeric option

    func overLap(start1: String, end1: String, start2: String, end2: String) -> Bool {
        if start1.compare(end2, options: .numeric) == .orderedAscending
            && start2.compare(end1, options: .numeric) == .orderedAscending {
            return false
        }
        return true
    }
    
    let start1 = "2019/02/01"
    let end1 = "2019/02/20"
    let start2 = "2019/02/15"
    let end2 = "2019/03/02"
    
    let result = overLap(start1: start1, end1: end1, start2: start2, end2: end2)
    print(result)