
可打印协议看起来最明显,但它在字符串插值和打印实例时被忽略,例如:
struct Point : Printable{ var x = 0 var y = 0 var description : String { return "(\(x),\(y))" } func toString() -> String { return description }} 同样,toString()约定也不起作用:
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表示结构,即:
p // {x 10,y 20} 有一种方法,我可以改变实例的显示方式?
Swift 2& 3在Swift 2中,Printable变成了customstringconvertible。例如,您可以创建一些结构体:
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)." }} 如果您初始化它们:
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
customstringconvertibleas a generic constraint,or accessing a conforming type’sdescriptiondirectly,is therefore discouraged.
以上是内存溢出为你收集整理的如何更改为Swift中的类型显示的文本表示?全部内容,希望文章能够帮你解决如何更改为Swift中的类型显示的文本表示?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)