- Swift 4 Protocol-Oriented Programming(Third Edition)
- Jon Hoffman
- 342字
- 2021-07-08 09:42:36
Type casting with protocols
Type casting is a way to check the type of an instance and/or to treat the instance as a specified type. In Swift, we use the is keyword to check whether an instance is of a specific type and the as keyword to treat an instance as a specific type.
The following example shows how we would use the is keyword:
if person is SwiftProgrammer { print("(person.firstName) is a Swift Programmer") }
In this example, the conditional statement returns true if the Person instance is of the SwiftProgrammer type or false if it isn't. We can use the where statement in combination with the is keyword to filter an array to only return instances of a specific type. In the next example, we filter an array that contains instances of the Person protocol and have it only return those elements of the array that are instances of the SwiftProgrammer type:
for person in people where person is SwiftProgrammer { print("(person.firstName) is a Swift Programmer") }
Now let's look at how we would cast an instance to a specific type. To do this, we can use the as keyword. Since the cast can fail if the instance is not of the specified type, the as keyword comes in two forms: as? and as!. With the as? form, if the casting fails it returns a nil. With the as! form, if the casting fails a runtime error is thrown; therefore, it is recommended to use the as? form unless we are absolutely sure of the instance type or we perform a check of the instance type prior to doing the cast.
The following example shows how we would use the as? keyword to attempt to cast an instance of a variable to the SwiftProgammer type:
if let _ = person as? SwiftProgrammer { print("(person.firstName) is a Swift Programmer") }
Since the as? keyword returns an optional, in the last example we could use optional binding to perform the cast.
Now let's see how we can use associated types with protocols.
- 零基礎搭建量化投資系統:以Python為工具
- Microsoft Application Virtualization Cookbook
- Interactive Data Visualization with Python
- Python Deep Learning
- Visual Basic程序設計實驗指導(第4版)
- Web App Testing Using Knockout.JS
- Ext JS 4 Plugin and Extension Development
- The Statistics and Calculus with Python Workshop
- Learning Image Processing with OpenCV
- HTML5 WebSocket權威指南
- Pandas入門與實戰應用:基于Python的數據分析與處理
- Visual C++ 2017網絡編程實戰
- Learning Puppet Security
- Introduction to Programming
- Full Stack Development with JHipster