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方法。