Java toString ()에 해당하는 Swift


답변:


122

description속성은 당신을 위해 무엇을 찾고 있습니다. 객체를 포함하는 변수를 인쇄 할 때 액세스되는 속성입니다.

description프로토콜을 채택한 CustomStringConvertible다음 description속성 을 구현 하여 자신의 클래스에 추가 할 수 있습니다 .

class MyClass: CustomStringConvertible {
    var val = 17

    public var description: String { return "MyClass: \(val)" }
}

let myobj = MyClass()
myobj.val = 12
print(myobj)  // "MyClass: 12"

descriptionString생성자 를 호출 할 때도 사용됩니다 .

let str = String(myobj)  // str == "MyClass: 12"

이것은 인스턴스 설명에 액세스하는 데 권장되는 방법입니다 ( myobj.description클래스가 구현하지 않으면 작동하지 않는 것과 반대 임 CustomStringConvertible).


어때 String(obj)?
nielsbot

도 있습니다 .debugDescription더 많은 프로그래머 친화적 인 버전
nielsbot

2
구조에 적용됩니까?
lmiguelvargasf

1
예, CustomStringConvertible이 Printable을 대체했습니다. @Antonio, 언제 변경되었는지 기억이 나지 않지만 Swift 3 이전에는 확실히 오래되었습니다.
vacawama

1
MyClass는 NSObject에서 확장되어야합니다
DàChún 2017

7

클래스 대신 구조체를 사용할 수 있다면 추가로 할 일이 없습니다.

구조체는 출력에 잘 인쇄됩니다.

print("\(yourStructInstance)")

또는 다음과 같은 클래스로 :

print(String(describing: yourClassInstance))

6

당신은 사용해야합니다 String(obj).

CustomStringConvertible에 대한 문서 에서 직접 :

노트

String (instance)는 모든 유형의 인스턴스에 대해 작동하며 인스턴스가 CustomStringConvertible 인 경우 설명을 반환합니다. 따라서 CustomStringConvertible을 제네릭 제약 조건으로 사용하거나 준수 유형의 설명에 직접 액세스하는 것은 권장되지 않습니다.


description()방법 CustomStringConvertible으로 충분할 것 같습니다 .
Greg Brown

5

NSObject확장 클래스로 수행되는 방법

모델 클래스가에서 확장 된 경우 다음과 같이 NSObject변수를 재정의해야 description합니다.

public override var description: String {
    return "\n{\n index: \(self.index),\n"
        + " country: \(self.name),\n"
        + " isoCountryCode: \(self.isoCountryCode),\n"
        + " localeId: \(self.localeId),\n"
        + " flagImageName: \(self.flagImageName!)\n}"
}

당신은 내가 그 일을 어떻게 확인할 수 있습니다 내에서 여기 Country클래스 에서, "CountryPicker 아이폰 OS 스위프트 라이브러리" .

또는 이해하기 쉽도록 클래스와 description메서드는 다음과 같아야합니다.

public class MyClass: NSObject {
   public var memberAttribute = "I'm an attribute"

   public override var description: String {
       return "My Class member: \(self.memberAttribute)"
   }
}

참고 : Modal 클래스를 확장하므로 클래스가 더 이상 NSObject클래스를 준수 할 필요가 없으며 클래스 자체의 변수를 CustomStringConvertible재정의 합니다. 항상 기억하십시오. 대부분은 이것을 달성하는 순수한 Swift 방법입니다.descriptionNSObjectCustomStringConvertible

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.