2014-12-14 3 views
0

Swift의 프로토콜을 사용하여 매우 이상한 문제를 만났습니다. 문제는 메서드의 시그니처 처리 내부입니다. 우리의 프로토콜에서 두 가지 선언문을 가지고 있다고 가정 해 봅시다. 둘 다 궁극적으로 같을 수 있습니다. 2 개의 동등한 메소드 또는 그 선언의 존재를 피하기 위해, Swift 컴파일러는 프로그램을 컴파일하는 동안 그것을 체크하지만 이상하게 작동합니다.Swift의 메서드 서명 처리

이제 코드를 살펴 보겠습니다. 내 프로토콜.

@objc 
protocol MyProtocol { 
    optional func MyProtocol(data: Data, numberOfDays calendar: Calendar) -> Int 
    optional func MyProtocol(data: Data, numberOfWeeks calendar: Calendar) -> Int 
} 

이제 두 방법 모두 선택 사항이므로 하나만 구현하십시오.

class CalendarView: UIView, MyProtocol { 
    func MyProtocol(data: Data, numberOfDays calendar: Calendar) -> Int { 
     return 31 
    } 
} 

실제로 작동해야하지만 그렇지 않습니다. 컴파일러의 말 :

메쏘드 '...'는 프로토콜 'MyProtocol' '...'에서 요구하는 것과 다른 인수 이름을가집니다.

단순히 메소드의 서명을 두 번째 서명으로 바꾸어줍니다. 두 가지 방법을 모두 구현하면 모든 문제가 폐기됩니다.

아무도 그 문제를 해결하는 방법을 알고 있습니까? 미리 감사드립니다. 당신이 당신의 기능 MyProtocol를 호출 중지하면

+0

일정이란 무엇입니까? 데이터 란 무엇입니까? – matt

+0

그리고 왜 MyProtocol 함수를 명명 했습니까? MyProtocol이라는 이름을 다시 사용합니다. 대문자로 함수 이름을 시작하면 안됩니다. – matt

+0

재생할 수 없습니다. 그 근거로 투표를 끝내십시오. – matt

답변

1

문제는 사라질 것이다.

(어느 쪽이든 또는 거기 데이터 또는 일정 유형에 뭔가 문제입니다.)

내가 f와 실제 유형을 NSData 및 NSCalendar하고 엉뚱한 MyProtocol 기능 이름으로 데이터 및 달력 형식을 대체, 그리고 그것을 컴파일 잘 :

@objc 
protocol MyProtocol { 
    optional func f(data: NSData, numberOfDays calendar: NSCalendar) -> Int 
    optional func f(data: NSData, numberOfWeeks calendar: NSCalendar) -> Int 
} 

class CalendarView: UIView, MyProtocol { 
    func f(data: NSData, numberOfDays calendar: NSCalendar) -> Int { 
     return 31 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 사실, 나는 또 다른 방법의 표식을 가지고있다. 어쨌든 Xcode를 다시 시작한 후에 문제가 발생했습니다. 가장 최신 버전은 일부 모서리에서 불안정합니다. – Majotron