Ich habe ein paar verschiedene Arten von Strukturen (Promo & Event). Ich möchte ein leeres Array erstellen, das je nach dem Ergebnis einer if
-Anweisung mit einem Array jedes Typs gefüllt wird.Swift initialisiert leeres Array um später verschiedene Strukturen zu speichern
So etwas wie folgt aus:
var dataArray:[Any] = [] // see options I've tried below
if myTest == true {
dataArray = [Promo, Promo, Promo]
} else {
dataArray = [Event, Event, Event]
}
ich verwendet haben versucht:
1. var dataArray: [Any] = []
2. var dataArray: [AnyObject] = []
3. var dataArray: [Any] = [Any]()
4. var dataArray: [AnyObject] = [AnyObject]()
aber wenn ich versuche, eine Reihe von Promo
Structs zu speichern in dataArray
bekomme ich einen Fehler Cannot assign value of type '[Promo]' to type '[Any]'
usw.
Also, wie initialisiere ich ein Array, so dass es eine Vielzahl von (unbekannten) Structs speichern kann. Oder wie ändere ich meine Structs, damit sie in einem Array gespeichert werden können?
Ich habe wirklich Mühe zu sehen, was ich falsch mache, also wären alle Hinweise hilfreich.
Hier sind meine Structs: Promo.swift
import Foundation
struct Promo {
// initialise the stored properties for use later
let promoId : Int
let date : NSDate
let title: String
let body: String
let busName : String
let busId : Int
let categoryId: Int
let featured: Bool
// a universal init() method which has optional parameters
init(promoId: Int,
date: NSDate,
title: String,
body: String,
busName: String,
busId: Int,
categoryId: Int,
featured: Bool
){
self.promoId = promoId
self.date = date
self.title = title
self.body = body
self.busName = busName
self.busId = busId
self.categoryId = categoryId
self.featured = featured
}
}
// allow us to compare structs
extension Promo: Equatable {}
func ==(lhs: Promo, rhs: Promo) -> Bool {
return lhs.promoId == rhs.promoId
&& lhs.date == rhs.date
&& lhs.title == rhs.title
&& lhs.body == rhs.body
&& lhs.busName == rhs.busName
&& lhs.busId == rhs.busId
&& lhs.categoryId == rhs.categoryId
&& lhs.featured == rhs.featured
}
Event.swift
import Foundation
struct Event {
// initialise the stored properties for use later
let eventId : Int
let date : NSDate
let title: String
let body: String
let busName : String
let busId : Int
let categoryId: Int
// a universal init() method which has optional parameters
init(eventId: Int,
date: NSDate,
title: String,
body: String,
busName: String,
busId: Int,
categoryId: Int
){
self.eventId = eventId
self.date = date
self.title = title
self.body = body
self.busName = busName
self.busId = busId
self.categoryId = categoryId
}
}
In dem Beispiel ordnen Sie die Strukturen nicht dem DatenArray, sondern dem Typ zu. Wollten Sie stattdessen dataArray = [Promo(), Promo(), Promo()] usw.? –
Ja, @CaseyFleser, das ist eigentlich was zugewiesen (Ich bekomme ein Array von Promo-Strukturen von einer Funktion zurückgegeben). Danke – James
Mögliches Duplikat von [Warum ist nicht \ [SomeStruct \] konvertierbar in \ [Beliebige \]?] (Http://stackoverflow.com/questions/37188580/why-isnt-somestruct-convertible-to-any) – Hamish