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"
description
String
생성자 를 호출 할 때도 사용됩니다 .
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 방법입니다.description
NSObject
CustomStringConvertible