Swift | 불투명 반환 타입 (Opaque return type)

Swift 5.1 ~

Swift에서 메소드에서 결과를 반환하기 위해서는 어떻게 메소드를 정의해야 할까요 ?

func makeKeyword() -> String {
    return "keyword" 
}

type을 표시해주면 됩니다.
위의 코드는 일반적인, 구체화된 타입(Concrete type)을 지정하는 코드입니다.


혹시 타입이 완벽하게 구체화되지는 않았지만,
조건 몇 가지를 만족하는 친구들을 반환하는 메소드를 정의하기 위해서는 어떻게 해야할까요?

이 글에서 이야기 할 불투명 반환 타입 (Opaque return type)이 필요합니다.



자, 불투명 반환 타입이 무엇이고 어떻게 사용하는지 알아보러 가시죠 ~ 고고싱 ~~~~ !

불투명 반환 타입 (Opaque return type) ?

불투명 반환타입은 몇 가지 조건을 만족하는 타입을 반환하고 싶을 때 사용됩니다.


예를들면 String처럼 이미 정해진 type도 아니고 !
changeColor 라는 메소드를 갖고 있다면 어떤 타입이라도 반환하고 싶을 때 입니다.

changeColor 라는 메소드를 갖고 있는 공통점을 만들기 위해서는
protocol을 만들어서 필요한 type에서 준거시킵니다. 🤟

protocol ColorControl {
    func changeColor(_ color: UIColor)
}

func makeView() -> some ColorControl {}

그리고 그 protocol을 위의 코드처럼 some 과 함께 선언합니다.

불투명 반환 타입 (Opaque return type) 의 사용

// 1️⃣ return type 이 만족해야할 조건 (메소드, 프로퍼티 등)을 protocol로 선언.
protocol ColorControl {
    func changeColor(_ color: UIColor)
}

final class MainView {
    // 🌟 가장 포인트 🌟🌟
    // 2️⃣ return type을 선언하는 곳에서 조건을 만족하는 protocol을 some과 함께 선언.
    func makeView() -> some ColorControl {
        return PopupView()
    }
}

// 3️⃣ protocol을 따르는 class 또는 struct를 선언.
final class PopupView: UIView {}

extension PopupView: ColorControl {
    func changeColor(_ color: UIColor) {
        backgroundColor = color
    }
}



위의 예제가 view로 구성된 부분이 올바르지는 않습니다 …. !
흐름만 참고 부탁드려요 🙏

불투명 반환 타입은 반환 되는 타입의 조건만 제시하는 것이기 때문에 return 값을 바로 사용하기에는 별도의 캐스팅이 필요할 수 있습니다.


불투명 반환 타입 (Opaque return type)은 SwiftUI에서 가장 많이 활용됩니다.

아직 iOS13가 완전히 보편화되지 않은 시장에서
불투명 반환 타입 (Opaque return type)은 일반적인 특정 반환타입만큼 활용되지 않겠지만
어떤 느낌인지 짚고 넘어가야 SwiftUI에서 알아야할 지식이 줄어들겠지요 🤢


오늘도 즐거운 iOS 개발되세용 ~ 😉

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중