Open Do-hyun-Kim opened 1 year ago
protocol Shape {
func describe() -> String
}
struct Square: Shape {
func describe() -> String {
return "I'm a square. My four sides have the same lengths."
}
}
struct Circle: Shape {
func describe() -> String {
return "I'm a circle. I look like a perfectly round apple pie."
}
}
func makeShape() -> some Shape {
return Circle()
}
let shape = makeShape()
print(shape.describe())
// "I'm a circle. I look like a perfectly round apple pie."
associatedType
을 사용했거나, Self
타입을 사용하는 프로토콜이라면 타입 전체가 제네릭하게 되므로 반환 타입으로 사용할 수 없습니다. some
키워드를 사용하면 이 문제가 해결된다.
some 키워드에 대해 설명하시오.
some
키워드는 Swift 5.1에서 지원되는 키워드이다.some
키워드를 사용하여computed property
혹은 함수의 구체적은return Type
을 숨기는 것(불투명한 타입)으로 제공 할 수있다.some
키워드를 사용함으로써opaque Type
을 제공할 수있으며 이러한 불투명한 타입을 통해 어느 의존관계에 생기지 않고 더욱 유연하게 프로그래밍이 가능하다는 장점을 부여할 수 있다.Opaque Types
Property
,subscript
,return Type
위치에 프로토콜을 쓰면서 앞에some
키워드를 붙이면 프로토콜을 준수하는 어떤 타입(Any) 중에 하나일 것이라는 뜻이다.return Type
정의 해 줄 수 있지만 프로토콜 내부에서associatedType
을 사용했거나,Self
타입을 사용하는 프로토콜이라면 타입 전체가 제너릭(Generic)하게 되므로 반환 타입으로 사용할 수 없게 된다. 때문에some
키워드를 사용하여 불투명한 타입으로 반환 해줘야 한다.some 키워드 간단한 사용법
some
키워드는 Swift 5.7 부터 함수 파라미터 타입으로 사용이 가능하다.some
키워드는 함수 반환 타입(reuturn Type
) 으로 사용이 가능하며 불투명한(Opaque Types
) Return Type 으로 반환 할 수 있다.protocol은 내부에
associatedtype
,Self
를 사용하면 참조를 제한한다. 때문에some
키워드를 사용하여 이러한 문제를 해결 할 수 있다. 즉 불투명한 타입(Opaque Types
) 으로 지정하여 문제를 해결 할 수 있다.📝 참고 사이트