- Swift 4 Protocol-Oriented Programming(Third Edition)
- Jon Hoffman
- 336字
- 2021-07-08 09:42:36
Polymorphism with protocols
The word polymorphism comes from the Greek roots poly (meaning many) and morphe (meaning form). In programming languages, polymorphism is a single interface to multiple types (many forms). There are two reasons to learn the meaning of the word polymorphism. The first reason is that using such a fancy word can make you sound very intelligent in casual conversation. The second reason is that polymorphism provides one of the most useful programming techniques, not only in object-oriented programming but also in protocol-oriented programming.
Polymorphism lets us interact with multiple types through a single uniform interface. In the object-oriented programming world, the single uniform interface usually comes from a superclass, while in the protocol-oriented programming world, that single interface usually comes from a protocol.
In the last section, we saw two examples of polymorphism with Swift. The first example was the following code:
var myPerson: Person myPerson = SwiftProgrammer(firstName: "Jon", lastName: "Hoffman",
birthDate: birthDateProgrammer) myPerson = FootballPlayer(firstName: "Dan", lastName: "Marino",
birthdate: birthDatePlayer)
In this example, we had a single variable of the Person type. Polymorphism allowed us to set the variable to instances of any type that conforms to the Person protocol, such as the SwiftProgrammer or FootballPlayer types.
The other example of polymorphism was in the following code:
var programmer = SwiftProgrammer(firstName: "Jon", lastName: "Hoffman",
birthDate: bDateProgrammer) var player = FootballPlayer(firstName: "Dan", lastName: "Marino",
birthDate: bDatePlayer) var people: [Person] = []
people.append(programmer)
people.append(player)
In this example, we created an array of Person types. Polymorphism allowed us to add instances of any types that conform to Person protocol to this array.
When we access an instance of a type through a single uniform interface, as we just showed, we are unable to access type-specific functionality. As an example, if we had a property in the FootballPlayer type that records the age of the player, we would be unable to access that property because it is not defined in the People protocol.
If we do need to access type-specific functionality, we can use type casting.
- C及C++程序設計(第4版)
- ReSharper Essentials
- C#程序設計實訓指導書
- Access 2010數據庫基礎與應用項目式教程(第3版)
- Building a Recommendation Engine with Scala
- Learning Unity 2D Game Development by Example
- SQL經典實例(第2版)
- SQL基礎教程(第2版)
- SSM開發實戰教程(Spring+Spring MVC+MyBatis)
- 運維前線:一線運維專家的運維方法、技巧與實踐
- 玩轉.NET Micro Framework移植:基于STM32F10x處理器
- Apache Solr PHP Integration
- C/C++代碼調試的藝術(第2版)
- Hands-On ROS for Robotics Programming
- HTML5程序設計基礎教程