Я новичок в программировании Swift/IOS, но что-то вроде это работает для меня.
func fetchDepRefs() -> Array<Datable> {return Array<Datable>()}
var depRefList = fetchDepRefs()
var testDEPref = DEPref(date: NSDate())
var testDEPref2 = DEPref(date: NSDate())
depRefList.append(testDEPref)
depRefList.append(testDEPref2)
for ref in depRefList {
print(ref.date)
}
Ваши функции могут также возвращать [датируемый]
например.
func fetchDepRefs() -> [Datable] {return [Datable]()}
Это также работает для вашего сценария
Edit:
Или, если вы ищете безопасности типа в ваших функциях, следующий код будет работать
func fetchDepRefs() -> [DEPref] {return [DEPref]()}
func fetchDepObss() -> [DEPObs] {return [DEPObs]()}
var depRefList = fetchDepRefs()
var depObsList = fetchDepObss()
var allDeps: [Datable] = [Datable]()
В вы можете добавить элементы из depRefList и depObsList в allDeps, и все будет работать нормально.
Редактировать снова:
Это полностью рабочий пример того, что вы пытаетесь достичь. В этом я использую функцию карты для преобразования элементов данных массивов датируемых объектов
protocol Datable {
var date: NSDate { get set }
}
struct DEPref: Datable {
var date: NSDate
}
struct DEPObs: Datable {
var date: NSDate
}
func fetchDepRefs() -> [DEPref] {return [DEPref]()}
func fetchDepObs() -> [DEPObs] {return [DEPObs]()}
var depRefs = fetchDepRefs()
var depObs = fetchDepObs()
var ref1 = DEPref(date: NSDate())
var obs1 = DEPObs(date: NSDate())
depRefs.append(ref1)
depObs.append(obs1)
var allDeps = depRefs.map{$0 as Datable} + depObs.map{$0 as Datable}
for x in allDeps {
print("I'm in allDeps array: \(x.date)")
}
См [это Q & A] (http://stackoverflow.com/questions/37188580/why-isnt-somestruct-convertible-to- any) для получения дополнительной информации о том, почему преобразование этого типа не выполняется. – Hamish
Если вы чувствуете, что ответ решил проблему, отметьте ее как «принятую», нажав зеленую галочку. Это помогает сосредоточиться на более старых SO, которые до сих пор не имеют ответов. – sineil