什么是Swift等效的Java toString()来打印类实例的状态?
Apple\xe2\x80\x99s 文档说CustomStringConvertible:
\n\n\n\n
description不鼓励直接访问 type\xe2\x80\x99s属性 [\xe2\x80\xa6]。
为什么?
\n\n下面是一个示例,其中 usingdescription对我来说似乎很有用。否则我如何得到相同的结果?
func dontPrintNil(_ s: String?) {\n if s == nil {\n print("placeholder")\n } else {\n print(s!)\n }\n}\n\nlet s: String? = nil\n\ndontPrintNil(s) // \xe2\x86\x92 placeholder\ndontPrintNil(s?.description) // \xe2\x86\x92 placeholder\ndontPrintNil(String(describing: s)) // \xe2\x86\x92 nil\ndontPrintNil("\\(s)") // \xe2\x86\x92 nil\nRun Code Online (Sandbox Code Playgroud)\n 所以我遇到了协议的主题,我在互联网上搜索了很多答案,但我找不到一个,至少一个解决了我的问题。
所以我明白协议是方法、属性等的“蓝图”,它可以在类或结构中实现,并且它需要符合其要求等,但为什么要使用一个?
我的意思是你也可以在结构本身内创建一个函数。编写协议似乎有点麻烦,然后为了实现所述协议,这次您必须使用更多代码再次编写所有要求。
人们使用协议有什么特别的原因吗?是为了您的代码安全还是出于其他原因?
例如:
在 swift 中,你有 CustomStringConvertible 协议,它有一个必需的计算属性来控制如何将自定义类型表示为可打印的 String 值,但你也可以在你的类中创建一个函数来解决这个问题。您甚至可以在不实现此协议的情况下计算出与此协议相同的属性。
因此,如果有人可以对这个主题有所了解,那就太好了。
先感谢您!