From 8592e22eadc9a66e1e3d50dd8f463968b0fb07ff Mon Sep 17 00:00:00 2001 From: futantan Date: Mon, 6 Jul 2015 20:58:25 +0800 Subject: [PATCH] =?UTF-8?q?Protocols=20-=20=E5=AE=8C=E6=88=90=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E5=90=88=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/chapter2/22_Protocols.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/source/chapter2/22_Protocols.md b/source/chapter2/22_Protocols.md index 6375ab3d..6e3c9e03 100644 --- a/source/chapter2/22_Protocols.md +++ b/source/chapter2/22_Protocols.md @@ -608,9 +608,9 @@ protocol SomeClassOnlyProtocol: class, SomeInheritedProtocol { ## 协议合成 -一个协议可由多个协议采用`protocol`这样的格式进行组合,称为`协议合成(protocol composition)`。 +有时候需要同时遵循多个协议。你可以将多个协议采用`protocol`这样的格式进行组合,称为`协议合成(protocol composition)`。你可以在`<>`中罗列任意多个你想要遵循的协议,以逗号分隔。 -举个例子: +下面的例子中,将`Named`和`Aged`两个协议按照上述的语法组合成一个协议: ```swift protocol Named { @@ -633,9 +633,12 @@ wishHappyBirthday(birthdayPerson) `Named`协议包含`String`类型的`name`属性;`Aged`协议包含`Int`类型的`age`属性。`Person`结构体`遵循`了这两个协议。 -`wishHappyBirthday`函数的形参`celebrator`的类型为`protocol`。可以传入任意`遵循`这两个协议的类型的实例 +`wishHappyBirthday`函数的形参`celebrator`的类型为`protocol`。可以传入任意`遵循`这两个协议的类型的实例。 -> 注意: `协议合成`并不会生成一个新协议类型,而是将多个协议合成为一个临时的协议,超出范围后立即失效。 +上面的例子创建了一个名为`birthdayPerson`的`Person`实例,作为参数传递给了`wishHappyBirthday(_:)`函数。因为`Person`同时遵循这两个协议,所以这个参数合法,函数将输出生日问候语。 + +> 注意 +> `协议合成`并不会生成一个新协议类型,而是将多个协议合成为一个临时的协议,超出范围后立即失效。 ## 检验协议的一致性