2014-06-07 1 views
1

두 equatable 값을 비교 - "에 대한 과부하를 찾을 수 없습니다 '=='제공된 인수 받아 들인다"나는 또한 시도

Could not find overload for '==' that accepts the supplied argument 


func indexOf(array: AnyObject[], value: AnyObject) -> Int? { 
    for (index, elem) in enumerate(array) { 
     if elem == value { 
      return index 
     } 
    } 
    return nil 
} 

아래의 코드에 값 ELEM을 비교했을 때 다음과 같은 오류를 얻고을 Equatable 여전히 같은 오류를

func indexOf(array: Array<Equatable>, value: Equatable) -> Int? { 
     for (index, elem : Equatable) in enumerate(array) { 
      if elem as Equatable == value as Equatable { 
       return index 
      } 
     } 
     return nil 
    } 

답변

3

점점 == 연산자는 유형 Equatable (A 프로토콜)의 인수가 필요합니다. 인수 유형을 AnyObject (Equatable이 아님)으로 선언했습니다. 따라서 컴파일러 오류가 발생합니다. array`이 같은 equatable 유형의 배열 '값'과 같다 같은 '것으로

func findIndex<T: Equatable>(array: T[], valueToFind: T) -> Int? { 
    for (index, value) in enumerate(array) { 
     if value == valueToFind { 
      return index 
     } 
    } 
    return nil 
} 
+2

가 실제로 일반적인되지 않을 경우, 다음은

는 스위프트에 애플 문서에서 구현 (27 페이지)입니다 ? 그렇지 않으면 다른 유형의 값을 비교할 수 있습니다. 허용되지 않습니다. 그렇습니까? – sepp2k

+0

맞습니다. (귀하의 의견 앞에서 우연히) 답변을 업데이트했습니다. 형식 'T'는 이제 값과 배열 내용이 동일합니다. – GoZoner

+1

감사합니다. –

관련 문제