Swift를 시작합니다. 필자의 이전 프로그래밍 배경은 주로 파이썬이기 때문에 스위프트에서 Pythonic 코딩 방법을 검색하는 경향이 있습니다. 운좋게도 Python에서 영감을 받았습니다. 파이썬에는 특수 메소드를 사용하여 클래스의 연산자를 오버로드하는 매우 강력한 방법이 있습니다. Swift에서 연산자를 오버로드 할 수있는 특정 이름 공간에서 함수를 정의 할 수 있지만 특수 연산자를 사용하려는 경우 연산자를 클래스에 과부하 할 수있는 방법을 찾지 못했습니다.Swift에서 Python과 같은 연산자 오버로드
수정 - 예제 추가.
class Vector(object):
def __init__(self, *args): # Initializing a vector of random size
self.vector = tuple(args)
def __len__(self): # This sources the data to the built-in len() function
return len(self.vector)
def __getitem__(self, i): # Overloads [ ] operator
return self.vector[i]
def __add__(self, vector): # Overloads + operator
if len(self) != len(vector):
raise ValueError("Vectors should be of equal length")
return tuple([self.vector[i] + vector[i] for i in xrange(len(self))])
a, b = Vector(1, 2, 3, 4), Vector(2, 3, 4, 5) # My modified tuples
print(a + b) # this operation is affected
print((1, 2, 3, 4) + (2, 3, 4, 5)) # this is not, since these are standard tuples
출력 : 여기
(3, 5, 7, 9)
(1, 2, 3, 4, 2, 3, 4, 5)
I 단지 의 getItem 방법을 정의하여, [상기 가 수단을 추가로 정의하는, 과부하 +하고있다. 이 클래스는 파이썬에서 터플 타입뿐만 아니라 이니셜 라이저로부터 [] 동작을 상속 받았다. 그러나 더 자세히 설명하기 위해 수동으로 만들었다. 오버로딩은 클래스에서 캡슐화되어 있으므로 모든 유형 및 클래스가 고유 한 특수 메소드를 정의하므로 일반 연산자 작동에 영향을주지 않습니다.
그러면 파이썬으로 어떻게 완료되었는지 스위프트 전문가에게 속삭이는 것입니다. –
일반적으로 스위프트의 연산자 오버로드는 항상 글로벌입니다. 가장 가까운 유형의 연산자 오버로드를 만드는 것입니다. 또한 Thomas가 지적한대로 모든 관련 정보를 제공하면 유용한 대답을 얻을 수 있습니다. –
@ThomasKilian 방금 예제를 추가했습니다. –