加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:11:02 所属栏目:百科 来源:网络整理
导读:如何修改在字符串插值中显示的文本输出? 可打印协议看起来最明显,但它在字符串插值和打印实例时被忽略,例如: struct Point : Printable{ var x = 0 var y = 0 var description : String { return "((x),(y))" } func toString() - String { return des
如何修改在字符串插值中显示的文本输出?

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

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 CustomStringConvertible as a generic constraint,or accessing a conforming type’s description directly,is therefore discouraged.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读