Swift - 불투명 유형
불투명한 유형
불투명한 반환 유형을 가진 함수 또는 메서드는 반환 값의 유형 정보를 숨깁니다.
예시 :
protocol Shape {
func draw() -> String
}
struct Triangle: Shape {
var size: Int
func draw() -> String {
var result: [String] = []
for length in 1...size {
result.append(String(repeating: "*", count: length))
}
return result.joined(separator: "\n")
}
}
struct Square: Shape {
var size: Int
func draw() -> String {
let line = String(repeating: "*", count: size)
let result = Array<String>(repeating: line, count: size)
return result.joined(separator: "\n")
}
}
let smallTriangle = Triangle(size: 3)
struct FlippedShape<T: Shape>: Shape {
var shape: T
func draw() -> String {
let lines = shape.draw().split(separator: "\n")
return lines.reversed().joined(separator: "\n")
}
}
struct JoinedShape<T: Shape, U: Shape>: Shape {
var top: T
var bottom: U
func draw() -> String {
return top.draw() + "\n" + bottom.draw()
}
}
func flip<T: Shape>(_ shape: T) -> some Shape {
return FlippedShape(shape: shape)
}
func join<T: Shape, U: Shape>(_ top: T, _ bottom: U) -> some Shape {
JoinedShape(top: top, bottom: bottom)
}
let opaqueJoinedTriangles = join(smallTriangle, flip(smallTriangle))
print(opaqueJoinedTriangles.draw())
// *
// **
// ***
// ***
// **
// *
반환 유형이 불투명한 함수가 여러 위치에서 반환되는 경우 가능한 모든 반환 값의 유형이 동일해야 합니다. 일반 함수의 경우 해당 반환 유형은 함수의 일반 유형 매개변수를 사용할 수 있지만 여전히 단일 유형이어야 합니다.
예 - 컴파일 오류:
func makeShape(shape : String) -> some Shape { // Function declares an opaque return type, but the return statements in its body do not have matching underlying types
if(shape == "square"){
print("here")
return Square(size : 4)
}else{
return Triangle(size : 4)
}
}
let shape = makeShape(shape: "square")
불투명 유형과 프로토콜 유형의 차이점
Reference
이 문제에 관하여(Swift - 불투명 유형), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/naveenragul/swift-opaque-type-38ib텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)