[ios] Java toString ()에 해당하는 Swift

toString()클래스 인스턴스의 상태를 인쇄하기 위해 Java 에 해당하는 Swift는 무엇입니까 ?



답변

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).


답변

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

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

print("\(yourStructInstance)")

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

print(String(describing: yourClassInstance))


답변

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

CustomStringConvertible에 대한 문서 에서 직접 :

노트

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


답변

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


답변