2017-05-05 3 views
1

Ich arbeite in einem Projekt in Swift 3.0 und ich habe eine Schleife, die mir den Zustand eines Objekts geben würde (gibt einen booleschen Wert in einer Array-Sequenz). Meine Anforderung ist, wenn der Elementstatus "wahr" ist, möchte ich den relevanten Indexpfad davon erhalten, also kann ich das gesamte Objekt von meinem ursprünglichen Array verwenden, das indexPath verwendet. Also in einer Schleife, wie kann ich das auch bekommen? Mein teilweise durchgeführter Code ist unten. In einem Kommentar habe ich angegeben, wo ich diese indexPath übergeben möchte.Holen Sie den IndexPfad des relevanten Elements in einer Schleife

func tapFunction(sender: UIButton) { 

     // This gives me the selected indexPath 
     print("ID :",sender.accessibilityIdentifier!) 


     if let rowIndexString = sender.accessibilityIdentifier, let rowIndex = Int(rowIndexString) { 
     self.sateOfNewSongArray[rowIndex] = !self.sateOfNewSongArray[rowIndex] 
     } 
     sender.isSelected = !sender.isSelected 


     for (element) in self.sateOfNewSongArray { 

     //This is where I wants to pass the rowIndex that became true 
      if element == true { 
       selectedSongList.addingObjects(from: [songList[rowIndex]]) 

      } 

     } 
    } 
+0

Versuchen Sie mit einer aktualisierten Antwort und lassen Sie mich wissen, wenn Sie irgendwelche Verwirrung haben. – Krunal

+0

der Typ meiner Arrays sind NSArray. So funktioniert das nicht – danu

+0

Verwenden Sie NSArray nicht in Swift, Deklarieren Sie Ihr Array, wie ich im letzten Beispielblock gezeigt habe. Beispiel für ein String-Array: late selectedSongList = [String]() Geben Sie hier Ihre Array-Deklaration frei. Ich helfe Ihnen dabei, Ihre Arrays in Swift-Arrays umzuwandeln. – Krunal

Antwort

1

Hinweis: Stellen Sie sicher, dass Ihr Array 'sateOfNewSongArray' hat boolean Typen von Elementen

Versuchen Sie folgende Lösungen:

Beispielcode 1: Nach Ihr aktueller Code in Ihrer Frage.

func tapFunction(sender: UIButton) { 

    // This gives me the selected indexPath 
    print("ID :",sender.accessibilityIdentifier!) 


    if let rowIndexString = sender.accessibilityIdentifier, let rowIndex = Int(rowIndexString) { 
     self.sateOfNewSongArray[rowIndex] = !self.sateOfNewSongArray[rowIndex] 
    } 
    sender.isSelected = !sender.isSelected 


    for (index, element) in self.sateOfNewSongArray.enumerated() { 

    if element { 
     if let songName:String = songList[index] { 
      selectedSongList.append(songName) 
     } 
    } 
    } 

} 

Beispielcode 2: einfacher und prägnant.

func tapFunction(sender: UIButton) { 

    // This gives me the selected indexPath 
    print("ID :",sender.accessibilityIdentifier!) 

    if let rowIndexString = sender.accessibilityIdentifier, let rowIndex = Int(rowIndexString) { 
     if let songName:String = songList[rowIndex] { 
      selectedSongList.append(songName) 
     } 

    } 

} 

aufgezählt() ist eine Funktion kehrt Folge von Paaren mit dem Index und dem Element des Arrays Aufzählen (durch Elemente der Array Iterieren)

Hier ist einfach Beispielcode für ihr Verständnis. Kopieren und führen Sie diesen Code:

let songList =  [“cat”, “dog”, “elephant”] 
let sateOfNewSongArray = [false, true, false] 
let selectedSongList = [String]() 

for (index, element) in self.sateOfNewSongArray.enumerated() { 

     if element { 
     if let animalName:String = songList[index] { 
       selectedSongList.append(animalName) 
     } 
     } 
} 

print(“selectedSongList - \(selectedSongList)”) 
+0

stell dir vor, in meinem "songList" Array habe ich [cat, dog, elephant] und in meinem sateOfNewSongArray gib mir [fales, true, fales], deshalb da das zweite Element mir "wahr" gibt ist meine Anforderung "Hund" zu bekommen "songList" -Array. Du bekommst was ich sage? – danu

+0

Es tut mir leid, dass ich sehr schnell bin, können Sie es bitte tun, meinen Code oben zu respektieren. Meine Anforderung besteht darin, den Index an die songList zu übergeben und den entsprechenden Artikel zu erhalten. – danu

Verwandte Themen