2017-05-05 7 views
1

저는 Swift 3.0 프로젝트에서 작업하고 있습니다. 객체의 상태를 알려주는 루프가 있습니다 (배열 시퀀스에서 부울 값을 제공). 내 요구 사항은 요소 상태가 "true"인 경우 관련 인덱스 경로를 가져오고 싶습니다. 따라서 해당 배열을 사용하여 전체 객체를 가져올 수 있습니다. indexPath 루프 내부에서 어떻게 그걸 얻을 수 있습니까? 내 부분적으로 완료된 코드는 아래와 같습니다. 의견에서 나는 이것을 어디로 전달하고 싶은지를 명시했다. indexPath.루프에서 관련 요소의 indexPath 가져 오기

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

혼동이 있으면 업데이트 된 답변을 시도해주세요. – Krunal

+0

내 배열의 형식은 NSArray입니다. 그래서이 작동하지 않습니다 – danu

+0

Swift에서 NSArray를 사용하지 마십시오, 마지막 샘플 블록에 표시된 것처럼 배열을 선언하십시오. 샘플 문자열 배열 : let selectedSongList = [String]() 여기에 배열 선언을 공유하면 배열을 Swift 배열로 변환하는 데 도움이됩니다. – Krunal

답변

1

:

샘플 코드 1 : 확인 배열 'sateOfNewSongArray을'확인은 부울 유형 요소의

다음 시도 솔루션을 가지고에 따르면 귀하의 질문에 귀하의 현재 코드.

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) 
     } 
    } 
    } 

} 

샘플 코드 2 : 더 쉽고 간결. 열거

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) 
     } 

    } 

} 

()이 함수 이해 여기서

기본 샘플 코드가 (어레이 요소가 반복하여) 인덱스 배열 요소 열거 쌍 시퀀스를 반환한다. 이 코드를 복사하여 실행하십시오 :

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

내 "노래 목록"배열에 상상해보십시오. [고양이, 개, 코끼리]가 있고 내 sateOfNewSongArray에서 제게 [사실, 진정한, 종달새]를주세요. 따라서 두 번째 요소가 "사실"을 제공하기 때문에 제 요구 사항은 "개"를 얻는 것입니다. "songList"배열. 너 무슨 말인지 알 겠어? – danu

+0

죄송합니다. 위의 코드를 존중 해 주시면 신속하게 처리 할 수 ​​있습니다. 내 요구 사항은 인덱스를 songList에 전달하고 관련 항목을 가져 오는 것입니다. – danu