- 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.
- 測試驅動開發:入門、實戰與進階
- Learning AWS Lumberyard Game Development
- 數據結構(C語言)
- Hands-On Microservices with Kotlin
- Mastering Ext JS
- 精通Python設計模式(第2版)
- Jupyter數據科學實戰
- Mastering Android Development with Kotlin
- SQL Server 2012 數據庫應用教程(第3版)
- 趣味掌控板編程
- Practical Linux Security Cookbook
- 計算機輔助設計與繪圖技術(AutoCAD 2014教程)(第三版)
- Flutter for Beginners
- 區塊鏈原理、設計與應用
- C語言程序設計教程