Swift相当于Java toString()

Mar*_*eon 72 string tostring ios swift customstringconvertible

什么是Swift等效的Java toString()来打印类实例的状态?

vac*_*ama 96

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"
Run Code Online (Sandbox Code Playgroud)

description在调用String构造函数时也使用它:

let str = String(myobj)  // str == "MyClass: 12"
Run Code Online (Sandbox Code Playgroud)

这是访问实例描述的推荐方法(相反,myobj.description如果类没有实现,则不起作用CustomStringConvertible)

  • 它适用于结构吗? (2认同)
  • 是的,CustomStringConvertible 取代了 Printable。@Antonio,我不记得它是什么时候改变的,但肯定是在 Swift 3 之前很久。 (2认同)

And*_*rey 7

如果可以使用struct而不是class,那么没有别的办法.

struct只是将自身打印到输出中

print("\(yourStructInstance)")
Run Code Online (Sandbox Code Playgroud)

或者像这样的类:

print(String(describing: yourClassInstance))
Run Code Online (Sandbox Code Playgroud)


Ewa*_*lor 6

你应该用String(obj).

直接来自CustomStringConvertible的文档:

注意

String(instance)将适用于任何类型的实例,如果实例恰好是CustomStringConvertible,则返回其描述.因此,不鼓励使用CustomStringConvertible作为通用约束或直接访问符合类型的描述.


Ran*_*man 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}"
}
Run Code Online (Sandbox Code Playgroud)

您可以在“CountryPicker iOS Swift 库”中Country课程中查看我是如何做到的。

或者,为了让您更容易理解,您的类和description方法应如下所示:

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

   public override var description: String {
       return "My Class member: \(self.memberAttribute)"
   }
}
Run Code Online (Sandbox Code Playgroud)

注意: 由于您要从中扩展 Modal 类,NSObject因此您的类不再需要遵守CustomStringConvertible类,并且您正在覆盖类本身的description变量NSObject。永远记住,CustomStringConvertible主要是实现这一点的纯 Swift 方式。