Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我何时以及为什么要在Swift中使用协议?_Swift_Protocols_Swift Protocols_Customstringconvertible - Fatal编程技术网

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

我何时以及为什么要在Swift中使用协议?,swift,protocols,swift-protocols,customstringconvertible,Swift,Protocols,Swift Protocols,Customstringconvertible,所以我遇到了协议的问题,我在互联网上搜索了很多答案,但我找不到一个,至少一个解决了我的问题 所以我理解协议是方法、属性等的“蓝图”,它可以在类或结构中实现,它需要符合它的要求等等,但是为什么要使用它呢 我的意思是你也可以在结构本身内部创建一个函数。写一个协议似乎有点麻烦,然后为了实现所说的协议,这次你必须用更多的代码再次编写所有的需求 使用协议有什么特别的原因吗?是出于代码安全还是其他原因 例如: 在swift中,您有CustomStringConvertible协议,它有一个必需的计算属性来控

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

所以我理解协议是方法、属性等的“蓝图”,它可以在类或结构中实现,它需要符合它的要求等等,但是为什么要使用它呢

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

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

例如:

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

protocol Printable {
var name: String { get }
}
因此,如果有人能在这个问题上透露一些信息,那就太好了

提前谢谢你

但是为什么要用一个呢

swift中的
协议
类似于其他一些语言中的
抽象

在回答您的问题之前,我们必须弄清楚,
协议
声明可能是多种多样的,但考虑到您已经阅读了大量的声明

提到这个答案也很好

现在让我们进入真正的用例

假设你有这个协议

protocol Printable {
var name: String { get }
}
现在我们需要某种类型的
结构
来确认它,或多个

这是它最大的好处之一

假设您必须打印对象的
名称
适当性

比如那些

    struct Human {
    var name: String
}
struct Animal {
    var name: String
}
您只需在不使用协议的情况下键入此内容

    func printOut(human: Human){
    human.name
   }

   func printOut(animal: Animal){
    animal.name    
   }
如果正确,请使用协议
Printable
观察下面的代码

struct Human: Printable {
    var name: String
}
struct Animal: Printable {
    var name: String
}

 func printOut(object: Printable){
    print(object.name)
   }
使用
协议
只需要一个
func
等等

结论

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

它的名称表示应用于确认方的效果

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

你也可以阅读更多关于他们的信息

更多关于用例的信息

但是为什么要用一个呢

swift中的
协议
类似于其他一些语言中的
抽象

在回答您的问题之前,我们必须弄清楚,
协议
声明可能是多种多样的,但考虑到您已经阅读了大量的声明

提到这个答案也很好

现在让我们进入真正的用例

假设你有这个协议

protocol Printable {
var name: String { get }
}
现在我们需要某种类型的
结构
来确认它,或多个

这是它最大的好处之一

假设您必须打印对象的
名称
适当性

比如那些

    struct Human {
    var name: String
}
struct Animal {
    var name: String
}
您只需在不使用协议的情况下键入此内容

    func printOut(human: Human){
    human.name
   }

   func printOut(animal: Animal){
    animal.name    
   }
如果正确,请使用协议
Printable
观察下面的代码

struct Human: Printable {
    var name: String
}
struct Animal: Printable {
    var name: String
}

 func printOut(object: Printable){
    print(object.name)
   }
使用
协议
只需要一个
func
等等

结论

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

它的名称表示应用于确认方的效果

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

你也可以阅读更多关于他们的信息


更多关于用例的信息。

swift中的协议是一种允许类确认特定规则集的模式

换句话说,协议是特定任务所必需的方法和属性的蓝图

您通过确认协议来实现协议。如果您的类未实现协议中定义的任何方法,swift编译器会告诉您

作为一个例子,让我们考虑一下你想制作一个汽车类。现在对汽车有特殊的要求。就像它有轮子、行李箱等一样,每个需求都可以定义为一个协议,然后由Car类实现。如果您的类没有主干,只需删除实现即可

面向协议编程是一种新的编程范式。这就解决了面向对象编程带来的一些问题。比如多重继承。Swift不允许多重继承,但允许对多个协议进行确认


在面向协议的编程中,从类中删除一些功能非常容易。你只是不再顺从它。与OOP相比,在POP中执行此类操作非常容易。

swift中的协议是一种允许类确认特定规则集的模式

换句话说,协议是特定任务所必需的方法和属性的蓝图

您通过确认协议来实现协议。如果您的类未实现协议中定义的任何方法,swift编译器会告诉您

作为一个例子,让我们考虑一下你想制作一个汽车类。现在对汽车有特殊的要求。就像它有轮子、行李箱等一样,每个需求都可以定义为一个协议,然后由Car类实现。如果您的类没有主干,只需删除实现即可

面向协议编程是一种新的编程范式。这就解决了面向对象编程带来的一些问题。比如多重继承。Swift不允许多重继承,但允许对多个协议进行确认