요즘 웹소설 주인공들이 힘을숨긴다는데 스위프트는 타입을 숨긴다
스위프트에서 반환타입등을 숨기고 싶을때 특정 프로토콜만은 준수한다는 의미를 나타낼때 불투명타입을 사용한다.
some키워드를 이용한다.
앞서 설명했던 것처럼 반환타입을 숨기고 싶은때 사용한다.
someFunction() -> some SomeProtocol{
//(대충 함수를 구현하는 내용)
return someInstance: SomeProtocol
}
반환타입을 명시하는 곳에 some키워드를 사용해서 나타낸다.
위 코드를 예를들어 설명하면 someFunction은 SomeProtocol을 준수하기만 하면 어떤 존재라고 반환 가능함을 명시하고 있다.
some을 이용하지 않고도 불투명한 타입을 받아들이는 형태로 코드를 작성할 수 있는데 이를 박스형 프로토콜타입 혹은 존재타입이라고 한다.
일단 예시 코드를 보자
protocol Drawable {
func draw()
}
struct Circle: Drawable {
func draw() {
print("Drawing a circle")
}
}
struct Square: Drawable {
func draw() {
print("Drawing a square")
}
}
let shapes: [any Drawable] = [Circle(), Square()]
for shape in shapes {
shape.draw()
}
이처럼 데이터의 타입을 any를 사용해서 특정 프로토콜을 준수하기만 하면 입력받는 형태를 말한다.
위 코드에선 [any Drawable]타입의 배열을 선언해서 Drawable을 준수하는 모든 인스턴스를 받아 들일수 있도록 작성하였다.
이러한 형태를 통해서 데이터의 입력을 불투명하게 설계 할 수 있다.
- some은 반환타입을 불투명하게 할 수 있다.
- some뒤에오는 타입을 준수하는 모든 데이터를 반환 할 수 있음을 의미한다.
- 존재타입은 불투명한 데이터 입력을 지원한다.
- any 키워드를 사용해서 특정 타입은 준수하는 존재를 받아들일 수 있도록 작성하는것을 말한다.