CustomStringConvertible 프로토콜

Lily·2021년 10월 20일
0
post-thumbnail

안녕하세요! 릴리입니다:-)

오늘은 객체를 String으로 바꿀 때 커스타마이징된 String으로 바꿀 수 있게 해주는 CustomStringConvertible 프로토콜에 대해 알아보도록 하겠습니다!

애플 개발자 문서의 글(아래 링크)을 참고하여 작성되었습니다😊

📑참고 문서
[Apple Developer Documentaion] CustomStringConvertible


CustomStringConvertible 프로토콜

이 프로토콜을 따르는 타입은 인스턴스를 string으로 바꿀 때 자체 정의해둔(coustomized) 표현으로 쓸 수 있습니다.

프로토콜을 구현하는 방법은 타입 내에 인스턴스 프로퍼티(description)를 정의해줍니다.

var description: String { get }

그러면 CustomStringConvertible 프로토콜을 따르는 타입의 인스턴스를 출력하려하면, description프로퍼티에서 정의해둔 표현(리턴하는 값)을 가져와서 출력해줍니다.

struct Point {
    let x: Int, y: Int
}

let p = Point(x: 21, y: 30)
print(p)
// Prints "Point(x: 21, y: 30)" 

extension Point: CustomStringConvertible {
    var description: String {
        return "(\(x), \(y))"  // customized representation
    }
}

print(p)
// Prints "(21, 30)"

그런데 주의할 점!
description프로퍼티에 바로 직접 접근하는 것은 권장되지 않습니다.(p.description
❌)

대신 String(describing:)이니셜라이져로 접근하는 것이 권장됩니다.
String(describing:)이니셜라이져는 CustomStringConvertible 프로토콜을 따르는 모든 타입을 인자로 받으며, description프로퍼티의 리턴값(custom string)으로 초기화합니다.

struct Point: CustomStringConvertible {
    let x: Int, y: Int

    var description: String {
        return "(\(x), \(y))"
    }
}

let p = Point(x: 21, y: 30)
let s = String(describing: p) // 프로토콜을 준수하는 인스턴스를 인자값으로 받아 초기화
print(s)
// Prints "(21, 30)"
profile
i🍎S 개발을 합니다

0개의 댓글