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

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.

主站蜘蛛池模板: 田林县| 岱山县| 广饶县| 始兴县| 岢岚县| 正阳县| 青铜峡市| 益阳市| 轮台县| 娱乐| 安平县| 永嘉县| 西和县| 花莲市| 望奎县| 恭城| 金平| 垦利县| 年辖:市辖区| 黑龙江省| 温泉县| 阿拉善左旗| 商丘市| 四川省| 怀安县| 浦江县| 措勤县| 手游| 黄大仙区| 高尔夫| 浠水县| 阜康市| 桑植县| 延川县| 马山县| 南木林县| 博湖县| 灵山县| 旬邑县| 金堂县| 澎湖县|