官术网_书友最值得收藏!

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.

主站蜘蛛池模板: 卓资县| 白沙| 安化县| 吴堡县| 太湖县| 长武县| 巴林右旗| 贵阳市| 高密市| 时尚| 开化县| 凤凰县| 乳源| 大埔县| 措勤县| 临城县| 建湖县| 镇平县| 若尔盖县| 渝中区| 金阳县| 黄陵县| 庆阳市| 昌乐县| 荣成市| 沛县| 门源| 若羌县| 西林县| 白银市| 伊宁县| 新安县| 聊城市| 朔州市| 怀仁县| 荥经县| 邵武市| 涿州市| 金堂县| 建湖县| 湖南省|