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

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.

主站蜘蛛池模板: 梅河口市| 民丰县| 潼南县| 牟定县| 兰西县| 昭通市| 镶黄旗| 龙游县| 和田市| 乌审旗| 永兴县| 都匀市| 宁明县| 乡城县| 芦山县| 富民县| 泸水县| 葵青区| 张掖市| 韩城市| 五指山市| 西平县| 泰顺县| 丰台区| 基隆市| 太仓市| 临漳县| 通道| 大姚县| 高唐县| 交城县| 民丰县| 舞钢市| 靖江市| 任丘市| 吴忠市| 金堂县| 泰宁县| 邢台市| 犍为县| 独山县|