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를 호출 중지하면
일정이란 무엇입니까? 데이터 란 무엇입니까? – matt
그리고 왜 MyProtocol 함수를 명명 했습니까? MyProtocol이라는 이름을 다시 사용합니다. 대문자로 함수 이름을 시작하면 안됩니다. – matt
재생할 수 없습니다. 그 근거로 투표를 끝내십시오. – matt