2016-10-10 6 views
0

Ich Schleife durch ein Array und jedes Mal, wenn ein Objekt mit der Kategorie gleich 1 gefunden Ich möchte überprüfen, ob ein anderes Objekt in Rest des Arrays mit diesem ist Kategorie. Ich schrieb diese MethodeSuchen Sie ein Objekt in einem Array mit einem Startindex

func getNextIndex(startIndex:Int , t : [Client]) -> Int{ 
     var index = startIndex 
     while(index < t.count && Int(t[index].category!) != 1){ 
      index += 1 
     } 
     if(t[index].category == 1){ 
      return index 
     }else{ 
      return -1 
     } 

    } 

Diese Rückkehr immer den gleichen Index, den ich benutze, um die Methode aufzurufen. Wenn ich es mit dem Index + 1 die App stürzt in der Linie if(t[index].category == 1)

+0

Ich weiß nicht, ob ich Ihre Frage verstanden habe. Aber das sollte nicht drinnen sein während? Die Überprüfung der Ursache wird nur durchgeführt, wenn der Loop endet. –

+0

Bitte beschreiben Sie genau, was Sie mit Ihrem Code erreichen wollen, weil Ihr Beispielcode nicht das tut, was Sie beschreiben. Ist es der vollständige Code, den Sie beschreiben, oder nur ein Fragment? – xpereta

Antwort

1

Das Verhalten, das Sie beschreiben, ist genau das, was man von diesem Code erwartet.

Wenn Sie aus Ihrer "while" -Schleife fallen, haben Sie entweder einen anderen Eintrag oder Index gefunden, der das Ende des Arrays passiert hat. Der letztere Fall verursacht Ihren Absturz.

Es gibt viele Möglichkeiten, dies zu programmieren, aber um Ihren Code weitgehend gleich zu halten, testen Sie nach der Schleife einfach, ob der Index kleiner als t.count ist. Wenn dies der Fall ist, haben Sie gefunden, was Sie suchen, Index zurückgeben. Wenn nicht, dann hast du den ganzen Weg durch die Schleife gegangen, ohne das zu finden, wonach du suchst, also gib -1 zurück.

0

Loop-Zustand nennen beendet die Iteration in zwei Situationen:

  • Wenn t[index].category ist 1 - das ist die Situation, die Sie suchen und dein Code verarbeitet es.
  • Wenn index das Ende des Arrays erreicht - dies ist die Situation, wenn das gewünschte Element nicht gefunden wird; Ihr Code verarbeitet diese Bedingung nicht, deshalb stürzt Ihre App ab.

Um dies zu beheben, und auch für das Element nach dem aktuellen Index zu suchen, den Code wie folgt ändern:

func getNextIndex(startIndex:Int , t : [Client]) -> Int { 
    var index = startIndex 
    while(index < t.count && Int(t[index].category!) != 1){ 
     index += 1 
    } 
    if index == t.count { 
     return -1 
    } 
    // Otherwise, category is 1. Continue searching 
    while(index < t.count && Int(t[index].category!) != 1){ 
     index += 1 
    } 
    return index != t.count ? index : -1 
} 
Verwandte Themen