2016-11-28 7 views
-1

특정 객체 배열을 가져올 필요가있을 경우 contains를 사용하는 방법을 포함하고 있습니다.swift 3.0의 객체 배열에 ".contains"를 사용하는 방법

테이블 뷰 행에 2 개의 이미지를 사용하여 확인란을 선택하거나 선택 취소하려고합니다.

코드 :

var originalParams = [ParamsModel]() 
var selectedParams = [ParamsModel]() 
if selectedParams.contains(originalParams[indexPath.index]) { 
      cell.btnSelect.setBackgroundImage(UIImage(named:"checked.png"), for: UIControlState.normal) 
     } 
     else 
     { 
      cell.btnSelect.setBackgroundImage(UIImage(named:"unchecked.png"), for: UIControlState.normal) 
     } 

나는 빠른 3.0 .IT를 사용하고 있습니다 보여줍니다 컴파일러 오류 "호출에 인수 라벨 '어디'누락". 어떤 도움을 주셔서 감사합니다.

+1

가 당신이 What을 asking are :

This code

는 also as more succinctly written be can? 이것은 정말로 불분명하다. – Alexander

+0

이 작업은 다음과 같습니다 :'selectedcheckboxArray.contains (checkboxArray.objectAtIndex (indexPath.row))'? – Alexander

+3

그런데 변수 이름에 "Array"를 사용하지 마십시오. 단순히 복수형으로 만들면 배열이 암시됩니다. 예를 들어'selectedcheckboxArray' 대신'selectedCheckboxes'를 입력하십시오. – Alexander

답변

1

ParamsModelParamsModel 인스턴스의 배열에서 contains(_:)을 호출 할 수 있도록하려면 Equatable을 준수해야합니다.

let imageName = selectedParams.contains(originalParams[indexPath.index]) ? "checked.png" : "unchecked.png" 
cell.btnSelect.setBackgroundImage(UIImage(named: imageName), for: .normal) 
+0

감사합니다. 나는 Equatable 클래스 ParamsModel에 부합하는 모델 클래스를 만들었습니다 : Equatable { // 마크 : 등록 var에 PARAM : 문자열 VAR에 isSelected : BOOL // 마크 : 인스턴스화 초기화 (PARAM : 문자열에 isSelected : BOOL) { self.param = PARAM self.isSelected =}에 isSelected 정적 FUNC의 == (좌 : ParamsModel 우 : ParamsModel) -> {BOOL 복귀 lhs.param == rhs.param } }하지만 이제는 contains의 오류는 "subscript 할 수 없습니다 ParamsModel 유형의 값을 '_'유형의 인덱스로 변경합니다. – user2695433

+0

새로운 질문 인 것처럼 보입니다. p – Alexander

+0

새 질문으로 추가하겠습니다. P – user2695433