Dut*_*ran 1 protocols swift swift-protocols customstringconvertible
所以我遇到了协议的主题,我在互联网上搜索了很多答案,但我找不到一个,至少一个解决了我的问题。
所以我明白协议是方法、属性等的“蓝图”,它可以在类或结构中实现,并且它需要符合其要求等,但为什么要使用一个?
我的意思是你也可以在结构本身内创建一个函数。编写协议似乎有点麻烦,然后为了实现所述协议,这次您必须使用更多代码再次编写所有要求。
人们使用协议有什么特别的原因吗?是为了您的代码安全还是出于其他原因?
例如:
在 swift 中,你有 CustomStringConvertible 协议,它有一个必需的计算属性来控制如何将自定义类型表示为可打印的 String 值,但你也可以在你的类中创建一个函数来解决这个问题。您甚至可以在不实现此协议的情况下计算出与此协议相同的属性。
因此,如果有人可以对这个主题有所了解,那就太好了。
先感谢您!
但为什么要使用一个呢?
Protocols在 swift 中类似于Abstractions 在其他一些语言中。
在回答你的问题之前,我们必须把事情弄清楚,Protocols声明可能是多种多样的,但考虑到你已经阅读了很多,
在这里提到这个答案也很棒。
现在让我们进入真正的用例。
考虑你有这个协议。
protocol Printable {
var name: String { get }
}
Run Code Online (Sandbox Code Playgroud)
现在我们需要某种类型的structsorclasses来确认它,或者多个。
在这里,它是它最大的好处之一。
考虑您必须打印name对象的属性。
例如那些。
struct Human {
var name: String
}
struct Animal {
var name: String
}
Run Code Online (Sandbox Code Playgroud)
你只需输入这个而不 Protocols
func printOut(human: Human){
human.name
}
func printOut(animal: Animal){
animal.name
}
Run Code Online (Sandbox Code Playgroud)
这是正确的,现在使用协议观察下面的代码Printable。
struct Human: Printable {
var name: String
}
struct Animal: Printable {
var name: String
}
func printOut(object: Printable){
print(object.name)
}
Run Code Online (Sandbox Code Playgroud)
它只需要我们一个func等等使用Protocols.
结论
用于最小化不必要的代码块的协议。
它的名字代表了应用在确认方上的效果。
协议可以作为参数类型注入。
您还可以在此处阅读有关它们的更多信息。
以及更多关于这里的用例。
| 归档时间: |
|
| 查看次数: |
2431 次 |
| 最近记录: |