Swift等效于JavatoString()来打印类实例的状态吗?
Answers:
该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)
String(obj)呢
.debugDescription一个对程序员更友好的版本
您应该使用String(obj)。
直接来自CustomStringConvertible的文档:
注意
String(instance)将适用于任何类型的实例,如果该实例碰巧是CustomStringConvertible,则返回其描述。因此,不建议将CustomStringConvertible用作一般约束,或直接访问符合类型的描述。
description()方法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 iOS Swift库”中检查我的操作方式。
或者,为了使您更容易理解,您的类和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该类,并且您正在description从NSObject类本身覆盖变量。永远记住,CustomStringConvertible主要是实现这一目标的纯Swift方法。