Swift2.0(15)类型的补充-创新互联

  • 可选链

    我们提供的服务有:成都网站设计、做网站、微信公众号开发、网站优化、网站认证、城东ssl等。为成百上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的城东网站制作公司

之前介绍过可选类型,再来深化一下可选链的概念

   如下面的代码,包含的符合关系:人—>宠物—>玩具

   class Person {
       var pet:Pet?
   }
   class Pet {
       var name:String
       var favorityToy:Toy?
       init(name:String) {
           self.name = name

       }

       func playToy() {
           print("Pet \(self.name) play toy")

       }

   }
   class Toy {
       var name:String
       init(name:String) {
           self.name = name
       }

   }

   Person的pet属性可以为nil,Pet的属性favorityToy可以为nil,这是有现实意义的

   let p1 = Person()

   print(p1.pet!.name)

   由于p1.pet并没有初始化,故为nil,在执行p1.pet!解封时,程序将崩溃(crash)

     可选链的格式:串联要访问的属性且在每个可选属性后增加?

   print(p1.pet?.favorityToy?.name)   //nil

可选链的常见应用场景:

   a. 可选链访问属性,如上面的代码

   b. 可选链访问方法,如:

        p1.pet?.playToy()

   ...

  • 类型的转换

先看三个类:

   class Animal {
       var age:Int = 1
   }
   class Dog : Animal {
       var dogName:String?
   }
   class Cat : Animal {
       var catName:String?

   }

is 关键字 用于进行类型检查,如:

  var p:Animal = Dog()

   if p is Dog {
       print("是")
   }
   else {
       print("不是")

   }

as 用于继承关系中的向上转型

   子类实例引用赋值给父类实例引用;其实直接赋值也是允许的

     var d1:Dog = Dog()

     var a1:Animal = d1 as Animal

as!/as? 用于继承关系中的向下转型

   父类实例引用(引用的父类实例也可能引用子类实例)赋值给子类实例引用

   as! 用于转换一定成功的情况(进行了强解封),返回的不是可选类型

   as? 用于转换不一定成功的情况,返回的是可选类型

   如:

     var a1:Animal = Dog()

     var d1:Dog? = a1 as? Dog

     print(d1)   //Optional(xxxx.Dog)

     if let d2:Dog = a1 as? Dog {

       print(d2) //xxxx.Dog

     }

AnyObject:表示任意class类型的实例

   var a:[AnyObject] = [10, 3.14 ,"hello"]

   for var item in a {
       if let a:Int = item as? Int {
           print("整数:\(a)")
       }
       else if let a:Double = item as? Double {
           print("浮点:\(a)")
       }
       else if let a:String = item as? String {
           print("字符串:\(a)")
       }

   }

Any:表示任意类型,除了方法类型(函数类型)

   var a = [Any]()

   a.append(10)
   a.append(3.14)

   a.append("hello")

   for var item in a {
       if let a:Int = item as? Int {
           print("整数:\(a)")
       }
       else if let a:Double = item as? Double {
           print("浮点:\(a)")
       }
       else if let a:String = item as? String {
           print("字符串:\(a)")
       }

   }

  • 类型的嵌套

Swift允许在结构体、枚举、类类型中嵌套定义结构体、枚举、类类型

这样做的好处是:方便组织代码、一定程度上起到了命名空间的作用

     如:

   class A {
       var name:String?
       class C {
           var name:String?
           var age:Int?
       }
   }
   class B {
       var name:String?
       class C {
           var height:Double?
       }

   }

   var p1:A.C = A.C()

   var p2:B.C = B.C()

   被嵌套的类,使用这种 . 方式表示

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页题目:Swift2.0(15)类型的补充-创新互联
网站路径:http://pwwzsj.com/article/didehd.html