如何更改为Swift中的类型显示的文本表示?

前端之家收集整理的这篇文章主要介绍了如何更改为Swift中的类型显示的文本表示?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何修改在字符串插值中显示的文本输出

可打印协议看起来最明显,但它在字符串插值和打印实例时被忽略,例如:

@H_403_3@struct Point : Printable { var x = 0 var y = 0 var description : String { return "(\(x),\(y))" } func toString() -> String { return description } }

同样,toString()约定也不起作用:

@H_403_3@var p = Point(x: 10,y: 20) println(p) // V11lldb_expr_05Point (has 2 children) println("\(p)") // V11lldb_expr_05Point (has 2 children) println(p.description) // (10,20) println("\(p.description)") // (10,20)

在PlayGround中的行为也不同,它使用它自己的String表示结构,即:

@H_403_3@p // {x 10,y 20}

有一种方法,我可以改变实例的显示方式?

Swift 2& 3

在Swift 2中,Printable变成了CustomStringConvertible。例如,您可以创建一些结构体:

@H_403_3@struct Animal : CustomStringConvertible { let type : String var description: String { return type } } struct Farm : CustomStringConvertible { let name : String let animals : [Animal] var description: String { return "\(name) is a \(self.dynamicType) with \(animals.count) animal(s)." } }

如果您初始化它们:

@H_403_3@let oldMajor = Animal(type: "Pig") let Boxer = Animal(type: "Horse") let muriel = Animal(type: "Goat") let orwellsFarm = Farm(name: "Animal Farm",animals: [oldMajor,Boxer,muriel])

自定义说明会显示在您的操场中:

另请参见CustomDebugStringConvertible,您可以在调试期间使用它进行更详细的输出

用法注意

您可以从任何类型初始化字符串,而不实现此协议。例如:

为此,文件说:

Using CustomStringConvertible as a generic constraint,or accessing a conforming type’s description directly,is therefore discouraged.

猜你在找的Swift相关文章