2014-11-18 2 views
1

신속한 과부하에 대한 질문이 있습니다. - 일부 정수신속한 과부하 연산자

struct Position { 

///The horisontal index for a chessboard [A-H] 
let horisontal : String 

///The vertical index for a chessboard [1-8] 
let vertical : Int 
} 

는 내가 다음에 필요로하는 인덱스 +의 방식으로 수평 인덱스를 변경하는 방법입니다 : 내 코드에서 나는 이렇게되면 구조를 가지고있다. 그럼 내가하는 일은 다음과 같이 '+'연산자를 오버로드하는 것입니다.

func + (left: Position.horisontal, right: Int) -> Bool { 
     //Some implementation in here 
} 

그리고 나서 세계가 충돌합니다. 컴파일러는 다음과 같이 알려줍니다. " 'horisontal은'Position '의 멤버 유형이 아닙니다." 이 상황에서 저를 도와 줄 수있는 것은 무엇입니까? 왜 컴파일러는 'horisontal'의 존재를 인정하지 않습니까? String과 Int 간의 추가 작업을 위해 내가 할 수있는 다른 작업은 무엇입니까?

마음 당신이 잘 작동하지만, 나는 그것이 연산자 오버로딩의 좋은 정신으로 생각하지 않는다 :

컴파일러 '의 존재를 인정하기를 거부하는 이유
func + (left: String, right: Int) -> Bool { 
     //Some implementation in here 
} 

답변

0

horisontal '?

horisontal [유형]은 유형이 아니기 때문에 Position 유형의 구성원입니다.

더 적절한 해결책은 행과 열 위치에 대해 닫힌 enum을 정의하는 것입니다.

+0

"닫힌"의미는 '비공개'입니다 ... –

+0

아니요, 닫힌 _ 간격으로 _ 폐쇄됨을 의미합니다. – mattt

+0

당신이 지금 무엇을 의미하는지 알 수 있습니다. 아주 멋진 솔루션입니다.하지만 예를 들어, _A1_ : piece.position.horisontal + 1이 _B2_와 동등한 구문을 목표로했습니다. –