• swift -- as / 扩展


    一、使用 可选链式 调用代替强制展开

    //当声明一个属性时,将属性类型设置为可选类型: 好处: 当可选类型的属性被赋予初始值时,系统调用初始值;当可选类型属性没有赋予初始值时,系统只会调用失败;如果属性强制展开,就会崩溃

    // 如果属性为一般类型,则必须赋予初始值

    struct Point {

        var width : Int = 0

    }

     class Person {

        var name : String = ""

        var age : Int?       //可选类型, 可以不赋值

        var po : Point? = Point.init()   //赋值

    }

    //调用

    var person = Person.init()

    person.name = "adsf"

    print(person.name)

     print(person.age)

    //print(person.po!.width)   //展开,只有赋有初始值,展开才不会报错

     person.po?.width = 1000

    二、类型匹配

    1.检查类型  is

    var array = [1,2,"10","88",90,100]

    var strNum = 0

    var intNum = 0

    for i in array {

        if i is Int{

            intNum += 1

        }

        if i is String {

            strNum += 1

        }

    }

     print(strNum,intNum)    //  2  4 

     2.向下转型  as? 或 as!

    //NSMutableArray > NSArray > Array 

    //可变类型-->不可变-->swift

    var arr = NSMutableArray.init(capacity: 0)

    arr.addObject(1)

    arr.addObject(2)

    let arr2 = arr as NSArray

    let arr3 = arr2 as Array     //最终arr3 变成swift中的数组类型

     print(arr3)      

    3.Any 和 AnyObject :

    //a.AnyObject 可以表示任何类类型的 实例

    //b.Any 可以表示任何类型,包括函数类型。

    var array6 : [AnyObject] = [1,2,3,4,"io"]

     print(array6)

    三、扩展

    //1.扩展语法

    extension Int {

        //2.属性扩展 (一定有返回值的)

        var a : Int {

            return self * 10

        }

         //3.方法扩展

        func age() -> Void{

            print("age")

        }

    }

     //使用拓展

    var ss : Int = 5

    print(ss)

    print(ss.a)

    ss.age()

    4.如果给父类扩展,则子类同样可以获取到

    例:

    class Student{

        var name = ""

    }

    class Xiao: Student {

        var age = 2

    }

    //扩展父类

    extension Student {

        func eat() -> Void{

            print("eat")

        }

    }

     //调用

    var stu = Student.init()

    stu.eat()

    var xiao = Xiao.init()

    xiao.eat()  //子类可以调用父类的 拓展的方法

  • 相关阅读:
    栈的概念
    什么是 JavaConfig?
    数据库连接池的原理。为什么要使用连接池。
    根据你以往的经验简单叙述一下MYSQL的优化
    动态横切
    横切技术
    什么是AOP
    BIO ,NIO ,AIO 有什么区别?
    简述Comparable和Comparator两个接口的区别
    Spring Boot 客户端?
  • 原文地址:https://www.cnblogs.com/daxueshan/p/5585279.html
Copyright © 2020-2023  润新知