swift 之 as、as!、as?

注释:派生类:

注释:派生类:
二义性:
贰义性难题
一.在继续时,基类之间、或基类与派生类之间爆发成员同名时,将面世对成员访问的不鲜明性——同名二义性。
二.当派生类从多少个基类派生,而这一个基类又从同3个基类派生,则在拜访此联合基类中的成员时,将生出另一种不强烈——路线二义性。
详解:http://blog.csdn.net/whz\_zb/article/details/6843298

贰 改换基类成员:一.基类成员的访问调整 2.对基类数据或成员函数的遮盖和隐身

1,as使用场馆
(1)从派生类转变为基类,向上转型(upcasts)

(二)解决二义性,数值类型调换

三 施行派生类的结构函数体中的内容

 

三,as?使用场馆
as? 和 as! 操作符的转变规则完全相同。但 as?
假诺转变不成功的时候便会回来三个 nil
对象。成功的话重临可选类型值(optional),必要大家拆包使用。
鉴于 as?
在转变退步的时候也不会油然则生谬误,所以对于若是能确认保障百分之百会中标的转变则可采取as!,不然使用 as?

class B{…}; class D:public B{.. .}; B b1, *pb1; D d1;

 

switch animal {
case let cat as Cat:
    print("如果是Cat类型对象,则做相应处理")
case let dog as Dog:
    print("如果是Dog类型对象,则做相应处理")
default: break
}

·差别承袭情势的震慑首要反映在:

二义性:
二义性问题
一.在持续时,基类之间、或基类与派生类之间发生成员同名时,将现出对成员访问的不明显性——同名贰义性。
二.当派生类从两个基类派生,而这个基类又从同多少个基类派生,则在做客此联合基类中的成员时,将发生另壹种不明显——路线2义性。

(3)switch 语句中开始展览情势匹配
假定不理解3个目标是何许项目,你能够透过switch语法检验它的品种,并且尝试在差异的景况下利用相应的档期的顺序进行相应的拍卖。

·**********************protected***************

1 class Animal {}
2 class Cat: Animal {}
3 let animal :Animal  = Cat()
4 let cat = animal as! Cat
let animal:Animal = Cat()

if let cat = animal as? Cat{
    print("cat is not nil")
} else {
    print("cat is nil")
}

pb1 = &d1;//③

(2)消除二义性,数值类型转换

1 let num1 = 42 as CGFloat
2 let num2 = 42 as Int
3 let num3 = 42.5 as Int
4 let num4 = (42 / 2) as Double

一,as使用场合
(一)从派生类调换为基类,向上转型(upcasts)

平昔基类:间接出席派生出某类的基类

 

class Animal {}
class Cat: Animal {}
let cat = Cat()
let animal = cat as Animal

派生的目标:当新主题素材应际而生,原有程序不可能完全缓和时,需对其张开扩大与改良

1 class Animal {}
2 class Cat: Animal {}
3 let cat = Cat()
4 let animal = cat as Animal
class Animal {}
class Cat: Animal {}
let animal :Animal  = Cat()
let cat = animal as! Cat

第十章 承接与派生

 

let num1 = 42 as CGFloat
let num2 = 42 as Int
let num3 = 42.5 as Int
let num4 = (42 / 2) as Double

·基类的publilc和protected成员的走访属性在派生类中保障不变

3,as?使用场合

2,as!使用场合
向下转型(Downcasting)时行使。由于是威逼类型调换,即使调换退步会报
runtime 运营错误。

 

1 let animal:Animal = Cat()
2 
3 if let cat = animal as? Cat{
4     print("cat is not nil")
5 } else {
6     print("cat is nil")
7 }

民用承袭:

2,as!使用场合

·为最远的派生类提供唯一的基类成员,而不另行发生数十次正片

 

代替包罗:

 

国有承袭:

(三)switch 语句中开展方式相称
比方不知情二个目的是何许品种,你能够透过switch语法检查测试它的品种,并且尝试在不一致的景况下利用相应的档案的次序实行相应的拍卖。

柒.三品种兼容规则

向下转型(Downcasting)时选用。由于是挟持类型调换,若是调换战败会报
runtime 运转错误。

 

 

一连与派生类的应和关系:

as? 和 as! 操作符的变换规则完全1致。但 as?
假如转变不成事的时候便会回去二个 nil
对象。成功的话重回可选类型值(optional),须求大家拆包使用。
出于 as?
在更动退步的时候也不会并发错误,所以对于假诺能保险百分百会成功的转移则可利用
as!,不然使用 as?

③ *******指南针能够涵盖转换为基类指针

1 switch animal {
2 case let cat as Cat:
3     print("如果是Cat类型对象,则做相应处理")
4 case let dog as Dog:
5     print("如果是Dog类型对象,则做相应处理")
6 default: break
7 }

 

三番肆回的目标:实现代码重用

B &rb = d1;//②

·通过派生类对象,使用的是派生类中的同名成员

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图