2014-09-25 2 views
0

의 프로토콜에 정의 된 첨자를 구현하는 동안이 1 VAR 2 첨자 다음과 같은 프로토콜 :오류 스위프트

protocol Universe{ 

    var count: Int{get} 

    subscript(heroAtIndex index: Int)->SuperPowered {get} 
    subscript(villainAtIndex index: Int)->SuperPowered {get} 

} 

이 클래스에서이 프로토콜을 구현하기 위해 노력하고 있지만 :

class Marvel: Universe{ 

    var _heroes = [ 
    SuperPowered.heroWithFirstName("Peter", lastName: "Parker", alias: "Spiderman"), 
    SuperPowered.heroWithFirstName("Scott", lastName: "Summers", alias: "Cyclops"), 
    SuperPowered.heroWithFirstName("Ororo", lastName: "Monroe", alias: "Storm")] 

    var _villains = [ 
    SuperPowered.villainWithFirstName("Victor", lastName: "Von Doom", alias: "Dr Doom"), 
    SuperPowered.villainWithFirstName("Erik", lastName: "Lehnsher", alias: "Magneto"), 
    SuperPowered.villainWithFirstName("Cain", lastName: "Marko", alias: "Juggernaut")] 

    // UNiverse protocol 

    var count : Int{ 
     get{ 
      return _heroes.count + _villains.count 
     } 
    } 

    subscript(heroAtIndex index: Int)->SuperPowered{ 
     return _heroes[index] 
    } 
} 

las 라인 (아래 첨자)에 오류가 있습니다. 그것 불평한다

method 'subscript(heroAtIndex:)' has different argument names from those required by protocol 'Universe' ('subscript(villainAtIndex:)') 
     subscript(heroAtIndex index: Int)->SuperPowered{ 
     ^

나는 컴파일러가 무엇에 관해 말하고 있는지 전혀 모른다 : 이름은 동일하다. 그리고 나는 심지어 복사했고, 붙였다.

무슨 일 이니?

+0

얘들 아, 아래 첨자를 구현하자마자 오류가 사라질 수 있으십니까? 오직 하나만 구현되는 한, 그 미친 오류로 실패합니다 ... – cfischer

답변

3

인수의 이름은 지정할 수도 있고 위치 지정할 수도 있습니다. heroAtIndex index을 입력하면 이름이 지정된 인수가됩니다. 즉 당신은 전화를해야합니다 subscript(heroAtIndex:x)

그러면 두 가지 방법이 정확히 같은 이름과 인수 유형을 가지고 있다는 문제가 있습니다. 혼란스러워지고 있고, 그 중 하나만 구현하고 있기 때문에 다른 하나의 구현을 찾으려고 할 때 인수 이름이 잘못되었다고 불평하고 있습니다.

둘 다 구현하면 (프로토콜에서 말한 것처럼) 더 이상 컴파일 시간 오류가 없으므로 오류 메시지와 같이 문제가 사라집니다.

+0

나는 정확히 같은 문제에 부딪 쳤고, 무엇이 잘못되었는지 알아 내려고 30 분을 보냈습니다. 두 메서드 중 첫 번째 구현은 두 번째 메서드의 코드 완성을 위반했기 때문에 두 번째 메서드를 추가하지 못했고 아무 것도 깨닫지 못했습니다. 아 Xcode! – josephap