Hallo ich wollte mal fragen wie ich ein Array nach etwas Durchsuchen kann und dann dazu die daten laden kann ? also ich möchte eine Suchmaske machen da gibt man was ein was man suchen möchte und dann wenn man es gefunden hat sollen die daten kommen
Array durchsuchen
Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen
-
-
Entweder mit händischem Iterieren durch das Array und vergleichen des jeweiligen Elementes - gut zum Lernen. Oder eleganter mittels NSPredicate, in dem Du die Auswahlkriterien definierst und ein Ergebnis-Array bekommst. Und sicher gibt es noch andere Lösungswege...
MattesDiese Seite bleibt aus technischen Gründen unbedruckt. -
naja ich hätte grob ne idee also ich möchte nach einem namen suchen lassen möchte dann den index zurückbekommen und damit könnte ich dann die elemente aufrufen. so stell ich mir das vor
-
Diese Seite bleibt aus technischen Gründen unbedruckt.
-
ich glaub das wird komplizierter. hab ja objecte gemacht und denen dann was zugewiesen einen String und dessen String will ich ja suchen lassen und dann den index herausfinden. Hier mal ein beispiel pokeitem[].name = "Bisasam"
-
Nee, das ist nicht kompliziert.
Sebi89 schrieb:
und dann dazu die daten laden kann
-
manoh schrieb:
Nee, das ist nicht kompliziert.
Sebi89 schrieb:
und dann dazu die daten laden kann
-
Sebi89 schrieb:
ich glaub du verstehst mich falsch.
-
Michael schrieb:
Sebi89 schrieb:
ich glaub du verstehst mich falsch.
Quellcode
- let pokeObject1 = Pokemon()
- pokeObject1.pokemonName = "Bisasam"
- pokeObject1.pokedexNummer = "# 001"
- pokeObject1.beschreibung = "Dieses Pokémon trägt von Geburt an einen Samen auf dem Rücken, der mit ihm keimt und wächst."
- pokeObject1.typ = "Typ: Pflanze, Gift"
- pokeObject1.groeße = "Größe: 0,7 m"
- pokeObject1.gewicht = "Gewicht: 6,9 Kg"
- pokeObject1.bild = UIImage(named: "Bisasam")!
-
Beispiel aus der Doku etwas abgeändert:
Quellcode
Neben einem Array gibt es auch ein Set oder Dictionary. Du muss gucken, vllt. passt eins davon sogar besser als dein Array. -
hmm ich überleg gerade wie ich das für mich umbauen kann am bessten
-
-
edit: hier habt ihr mal den ganzen code
Quellcode
- import UIKit
- class ViewController: UIViewController, ChangeNameDelegate {
- // MARK: - ViewDidLoad
- override func viewDidLoad() {
- super.viewDidLoad()
- setupLabel()
- createPokeObject()
- namenLabel.text = pokeItem[indexNummer].pokemonName
- nummerLabel.text = pokeItem[indexNummer].pokedexNummer
- beschreibungsLabel.text = pokeItem[indexNummer].beschreibung
- typLabel.text = pokeItem[indexNummer].typ
- groeßeLabel.text = pokeItem[indexNummer].groeße
- gewichtLabel.text = pokeItem[indexNummer].gewicht
- pokemonImageView.image = pokeItem[indexNummer].bild
- }
- // MARK: - Outlets und Variabeln
- @IBOutlet weak var namenLabel: UILabel!
- @IBOutlet weak var nummerLabel: UILabel!
- @IBOutlet weak var beschreibungsLabel: UILabel!
- @IBOutlet weak var typLabel: UILabel!
- @IBOutlet weak var groeßeLabel: UILabel!
- @IBOutlet weak var gewichtLabel: UILabel!
- @IBOutlet weak var weiterOutlet: UIButton!
- @IBOutlet weak var zurueckOutlet: UIButton!
- @IBOutlet weak var pokemonImageView: UIImageView!
- var pokeItem = [Pokemon]()
- var indexNummer = 0
- // MARK: - Button Methodem
- @IBAction func weiterButton(_ sender: UIButton) {
- if indexNummer < pokeItem.count - 1 {
- indexNummer += 1
- }
- namenLabel.text = pokeItem[indexNummer].pokemonName
- nummerLabel.text = pokeItem[indexNummer].pokedexNummer
- beschreibungsLabel.text = pokeItem[indexNummer].beschreibung
- typLabel.text = pokeItem[indexNummer].typ
- groeßeLabel.text = pokeItem[indexNummer].groeße
- gewichtLabel.text = pokeItem[indexNummer].gewicht
- pokemonImageView.image = pokeItem[indexNummer].bild
- //print(indexNummer)
- }
- @IBAction func zurueckButton(_ sender: UIButton) {
- if indexNummer <= pokeItem.count - 1 {
- indexNummer -= 1
- }
- if indexNummer <= 0 {
- indexNummer = 0
- }
- namenLabel.text = pokeItem[indexNummer].pokemonName
- nummerLabel.text = pokeItem[indexNummer].pokedexNummer
- beschreibungsLabel.text = pokeItem[indexNummer].beschreibung
- typLabel.text = pokeItem[indexNummer].typ
- groeßeLabel.text = pokeItem[indexNummer].groeße
- gewichtLabel.text = pokeItem[indexNummer].gewicht
- pokemonImageView.image = pokeItem[indexNummer].bild
- //print(indexNummer)
- }
- @IBAction func searchButton(_ sender: UIButton) {
- performSegue(withIdentifier: "showSearchController", sender: nil)
- }
- override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
- if segue.identifier == "showSearchController" {
- let destVC = segue.destination as! SearchViewController
- destVC.delegate = self
- }
- }
- // MARK: - Funktionen
- func searchNameFromUser(name: String) {
- }
- // MARK: - Pokemon Objecte
- func createPokeObject() {
- let pokeObject1 = Pokemon()
- pokeObject1.pokemonName = "Bisasam"
- pokeObject1.pokedexNummer = "# 001"
- pokeObject1.beschreibung = "Dieses Pokémon trägt von Geburt an einen Samen auf dem Rücken, der mit ihm keimt und wächst."
- pokeObject1.typ = "Typ: Pflanze, Gift"
- pokeObject1.groeße = "Größe: 0,7 m"
- pokeObject1.gewicht = "Gewicht: 6,9 Kg"
- pokeObject1.bild = UIImage(named: "Bisasam")!
- let pokeObject2 = Pokemon()
- pokeObject2.pokemonName = "Bisaknosp"
- pokeObject2.pokedexNummer = "# 002"
- pokeObject2.typ = "Typ: Pflanze, Gift"
- pokeObject2.groeße = "Größe: 1 m"
- pokeObject2.gewicht = "Gewicht: 13 Kg"
- pokeObject2.beschreibung = "Sobald die Knospe auf seinem Rücken aufgeht, kann BISAKNOSP nicht mehr auf zwei Beinen stehen."
- pokeObject2.bild = UIImage(named: "Bisaknosp")!
- let pokeObject3 = Pokemon()
- pokeObject3.pokemonName = "Bisaflor"
- pokeObject3.pokedexNummer = "# 003"
- pokeObject3.typ = "Typ: Pflanze, Gift"
- pokeObject3.groeße = "Größe: 2 m"
- pokeObject3.gewicht = "Gewicht: 100 Kg"
- pokeObject3.beschreibung = "Dieses Pokémon folgt der Sonne. Die Pflanze auf seinem Rücken absorbiert Solarenergie."
- pokeObject3.bild = UIImage(named: "Bisaflor")!
- let pokeObject4 = Pokemon()
- pokeObject4.pokemonName = "Glumanda"
- pokeObject4.pokedexNummer = "# 004"
- pokeObject4.typ = "Typ: Feuer"
- pokeObject4.groeße = "Größe: 0,6 m"
- pokeObject4.gewicht = "Gewicht: 8,5 Kg"
- pokeObject4.beschreibung = "Dieses POKéMON bevorzugt heiße Lebensräume. Bei Regen dampft die Schwanzspitze von GLUMANDA."
- pokeObject4.bild = UIImage(named: "Glumanda")!
- let pokeObject5 = Pokemon()
- pokeObject5.pokemonName = "Glutexo"
- pokeObject5.pokedexNummer = "# 005"
- pokeObject5.typ = "Typ: Feuer"
- pokeObject5.groeße = "Größe: 1,1 m"
- pokeObject5.gewicht = "Gewicht: 19 Kg"
- pokeObject5.beschreibung = "Wenn GLUTEXO mit seinem Schwanz schwingt, steigt die Temperatur ins Unermessliche."
- pokeObject5.bild = UIImage(named: "Glutexo")!
- pokeItem.append(pokeObject1)
- pokeItem.append(pokeObject2)
- pokeItem.append(pokeObject3)
- pokeItem.append(pokeObject4)
- pokeItem.append(pokeObject5)
- }
- }
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sebi89 ()
-
da zeichen zuende sind mache ich noch ein Post. ich komm der sache schon näher aber es klappt noch nicht ganz. die funktion kommt übrigens vom 2. viewcontroller übers protocol mit delegate und so.
Quellcode
- func searchNameFromUser(name: String) {
- let array = [Pokemon().pokemonName]
- if let index = array.firstIndex(of: name ) {
- print("\(index)")
- indexNummer = index
- }
- namenLabel.text = pokeItem[indexNummer].pokemonName
- nummerLabel.text = pokeItem[indexNummer].pokedexNummer
- beschreibungsLabel.text = pokeItem[indexNummer].beschreibung
- typLabel.text = pokeItem[indexNummer].typ
- groeßeLabel.text = pokeItem[indexNummer].groeße
- gewichtLabel.text = pokeItem[indexNummer].gewicht
- pokemonImageView.image = pokeItem[indexNummer].bild
- }
-
Hab wohl alle vergrault was
-
Ich glaube, wir warten auf eine konkrete Frage: "klappt nicht ganz" qualifiziert sich nicht als Fehlerbeschreibung. Was funktioniert nicht, was hast Du per Debugger oder Log-Ausgaben getestet?
... als Anfänger würde ich Dir weiterhin das händische Iterieren (also Durchlaufen der Schleife) empfehlen: Dann musst Du Dich mit den einzelnen Schritten selber auseinandersetzen und weisst am Ende, warum was passiert. Optimieren sollte man m. E. erst, wenn man sein Handwerkszeug beherrscht.
Komplette Codes zu posten (und auf ein Review zu hoffen) ist eher kontraproduktiv ... trotzdem solltest Du mal zurueckButton mit weiterButton vergleichen: Da fehlt der oben von mir angesprochene Transfer.
MattesDiese Seite bleibt aus technischen Gründen unbedruckt. -
Ja iwie scheint die funktion nicht zu funktionieren. Im 2. viewcontroller wird sie aufgerufen und bekommt auch was übergeben aus nem TextFeld und wird per delegate rüber geschickt zum ersten. Keine Ahnung was das nicht klappt bekomm keinen error
-
Der Reihe nach - nur weil ein Kompiler keinen Fehler wirft, muss Code nicht funktionieren:
- Ist name in der Funktion gefüllt?
- Ist array in der Funktion gefüllt?
- Auf welchen Wert wird index gesetzt?
Auch das ist Programmieren...
MattesDiese Seite bleibt aus technischen Gründen unbedruckt. - Ist name in der Funktion gefüllt?
-
Ich verstehe den Code nicht so ganz.
Du erstellst dir hier ein Array mit einem Pokémon Namen
Der Name ist doch leer, so kannst du auch nichts finden.
Eigentlich musst du deinen Filter doch auf dein Array pokeitem anwenden.
-
Weiter oben ist der ganze code von mir. name kommt vom 2. view und wird aus dem textfield übergeben. Pokemon.pokemonName ist das object in dem array dessen string ich suchen will