我何时以及为什么会在 Swift 中使用协议?

Dut*_*ran 1 protocols swift swift-protocols customstringconvertible

所以我遇到了协议的主题,我在互联网上搜索了很多答案,但我找不到一个,至少一个解决了我的问题。

所以我明白协议是方法、属性等的“蓝图”,它可以在类或结构中实现,并且它需要符合其要求等,但为什么要使用一个?

我的意思是你也可以在结构本身内创建一个函数。编写协议似乎有点麻烦,然后为了实现所述协议,这次您必须使用更多代码再次编写所有要求。

人们使用协议有什么特别的原因吗?是为了您的代码安全还是出于其他原因?

例如:

在 swift 中,你有 CustomStringConvertible 协议,它有一个必需的计算属性来控制如何将自定义类型表示为可打印的 String 值,但你也可以在你的类中创建一个函数来解决这个问题。您甚至可以在不实现此协议的情况下计算出与此协议相同的属性。

因此,如果有人可以对这个主题有所了解,那就太好了。

先感谢您!

Moh*_*d S 6

但为什么要使用一个呢?

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.

结论

用于最小化不必要的代码块的协议。

它的名字代表了应用在确认方上的效果。

协议可以作为参数类型注入。

您还可以在此处阅读有关它们的更多信息。

以及更多关于这里的用例。