AnyObject constraints

Hello!
I can have Array<String> or Array<Date>, if I want both I have to use Array<Any>.
Is there way to create Array<String, Date> which would be essentially Array<Any>, but constrained/type checked to String or Date?

Option 1

enum Box {
    case string(String)
    case date(Date)
}

var array1 = [Box]()

array1.append(.string("aaa"))
array1.append(.date(Date()))

Option 2

protocol P {}

extension Date: P {}
extension String: P {}

var array2 = [P]()

array2.append("aaa")
array2.append(Date())
3 Likes