Gesamt Noob Frage, aber ich habe mein Bestes getan und kann nicht herausfinden, wie ich über mein Array iterieren und feststellen, ob es enthält alle Werte eines anderen Arrays.überprüfen, ob ein Array alle Werte eines anderen Arrays enthält (haben alle Benutzer Aufträge zugewiesen?)
Hier ist meine Array-Klasse (dailyJobs):
class JobsAndHabits {
var name: String
var multiplier: Double
var assigned: String
var order: Int
init(jobName: String, jobMultiplier: Double, jobAssign: String, jobOrder: Int) {
self.name = jobName
self.multiplier = jobMultiplier
self.assigned = jobAssign
self.order = jobOrder
}
Und hier ist die Klasse I (Benutzer) überprüfen möchten:
class UserClass {
var imageURL: String
var firstName: String
var birthday: Int
var passcode: Int
var gender: String
var childParent: String
init(userProfileImageURL: String, userFirstName: String, userBirthday: Int, userPasscode: Int, userGender: String, isUserChildOrParent: String) {
self.imageURL = userProfileImageURL
self.firstName = userFirstName
self.birthday = userBirthday
self.passcode = userPasscode
self.gender = userGender
self.childParent = isUserChildOrParent
}
Hier ist meine JSON Baum, wenn das hilft:
{
"-Kw2SkmAqo3G_cVFP26Y" : {
"assigned" : "Aiden",
"multiplier" : 1,
"name" : "table",
"order" : 2
},
"-Kw2SkmAqo3G_cVFP26Z" : {
"assigned" : "Mom",
"multiplier" : 1,
"name" : "dishes",
"order" : 3
},
"-Kw2SyhJNkjKNQ-sKBeT" : {
"assigned" : "Sophie",
"multiplier" : 1,
"name" : "floors",
"order" : 0
},
"-Kw2SyhJNkjKNQ-sKBeU" : {
"assigned" : "Savannah",
"multiplier" : 1,
"name" : "laundry",
"order" : 1
},
"-Kw7H3pY2L5PzLLdd6qD" : {
"assigned" : "Dad",
"multiplier" : 1,
"name" : "another daily test",
"order" : 4
},
"-Kw7HAWwAvv5ZjYuNOrg" : {
"assigned" : "Sophie",
"multiplier" : 1,
"name" : "daily job testsaroo!",
"order" : 5 }
Und hier ist das, was ich versucht habe:
Versuch # 1:
var tempArray = [String]()
for user in self.users {
for job in self.dailyJobs {
if job.assigned == user.firstName {
print(user.firstName,"has a job",job.name)
tempArray.append(user.firstName)
}
}
}
for user in self.users {
if tempArray.contains(user.firstName) {
print("true")
} else {
print("false")
}
}
Versuch # 2: (dies noch nicht einmal kompilieren)
for job in self.dailyJobs {
if self.users.contains(where: job) {
print(true)
}
}
Versuch # 3: druckt "Failed" wiederholt.
Wie überprüfe ich, ob jedem Benutzer in meinem Benutzer-Array mindestens ein Job zugewiesen ist? Mit anderen Worten, wie stelle ich sicher, dass innerhalb des dailyJobs
Arrays jeder user.firstName
mindestens einmal dargestellt wird?
Ich denke, ich muss eine Art Schleife machen, aber ich bin mir nicht sicher, wie es weitergeht. Kann mir jemand in die richtige Richtung zeigen? Im Moment gehe ich nur im Kreis (wenn du das Wortspiel verzeihst).
Beachten Sie, dass Sie nur eine 'Klasse' für die seltenen Fälle verwenden sollten, in denen es sinnvoll ist, Referenzen anstelle von Werten zu verwenden. Für die meisten Datenobjekte sollten Sie 'struct' verwenden. Dann können Sie diese 'init'-Methoden vollständig loswerden, weil' structs' ein 'init' synthetisiert, das all Ihre Eigenschaften einstellt. In Swift 4 erhalten Sie, wenn Sie sich an das 'Codable'-Protokoll halten, automatisch das Kodieren und Dekodieren von JSON (und möglicherweise anderen Datenstrukturen). – ColGraff
Ausgezeichnete Info. Wäre ich in der Lage, meine Klassen für Strukturen im Verhältnis 1: 1 zu tauschen, oder müsste ich meinen Code komplett neu schreiben? Was ich meine, ist, könnte ich reingehen und meine Klasse in eine Struktur ändern und alles wäre in Ordnung, oder erfordert es viel mehr Arbeit, weil Klassen und Strukturen keine vergleichbaren Objekte sind? –
Wenn Sie nicht einige Sprachfunktionen verwenden, die sehr klassenspezifisch sind, sollten Sie nur wenig Probleme haben, die beiden zu tauschen. – ColGraff