- 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.
- Building Modern Web Applications Using Angular
- Python語言程序設計
- Responsive Web Design with HTML5 and CSS3
- iOS開發實戰:從入門到上架App Store(第2版) (移動開發叢書)
- Getting Started with Eclipse Juno
- 現代C++編程實戰:132個核心技巧示例(原書第2版)
- Spring Boot實戰
- Visual FoxPro 6.0程序設計
- 深度探索Go語言:對象模型與runtime的原理特性及應用
- 工業機器人離線編程
- 軟件設計模式(Java版)
- INSTANT PLC Programming with RSLogix 5000
- 小學生C++趣味編程從入門到精通
- Web程序設計與架構
- Unity3D游戲開發標準教程