美文网首页
第十八节 Swift 中的类型转换

第十八节 Swift 中的类型转换

作者: 码客南君 | 来源:发表于2020-07-14 14:09 被阅读0次

    在Swift中一般使用 is 关键字实现类型检查,使用 as关键字实现类型转换。

    为类型转换定义类层次

    下面定义了三个类:Person、Chinese和American。Chinese 和 American 是 Person的子类。

    代码示例:

    先定义一个 Person基类

    class Person {
        var weight:Float
        init(weight:Float) {
            self.weight = weight
        }
    }
    

    再定义两个Person的子类

    class Chinese: Person {
        var name:String = "张三"
        init(name:String,weight:Float) {
            super.init(weight: weight)
            self.name = name
        }
    }
    
    class American: Person {
        var age:Int = 30
        init(age:Int,weight:Float) {
            super.init(weight: weight)
            self.age = age
        }    
    }
    

    最后创建一个名为 People的数组,包含两个 Chinese实例和两个 American实例。

    People数组的类型是在初始化的时候根据包含的实例推断出来,Swift类型检查器可以推断 Chinese和 American有一个共同的父类 Person,所以 People的类型推断为 [Person]。

    let People = [
    Chinese(name: "张三", weight: 50.0),
    American(age: 30, weight: 60.0),
    Chinese(name: "李四", weight: 55.0),
    American(age: 40, weight: 65.0)
    ]
    // "People" 的类型被推断为[Person]
    

    类型检查

    通过类型检查操作符 ( is )来检查一个实例是否属于一个特定的子类。
    如果实例是该子类类型,类型检查操作符返回 true ,否则返回 false 。

    代码示例

    var ChineseCount = 0
    var AmericanCount = 0
     
    for people in People {
        if people is Chinese {
            ChineseCount += 1
        } else if item is American {
            AmericanCount += 1
        }
    }
    

    类型转换

    as 和 is相比,除了可以检查类型外,还可以访问子类的属性或方法。

    代码示例

    for person in Person {
      if let chi = person as? Chinese {
        print(chi.name)
      } else if let ame = person as? American {
        print(ame.age)
      }
    }
    

    相关文章

      网友评论

          本文标题:第十八节 Swift 中的类型转换

          本文链接:https://www.haomeiwen.com/subject/pkaxhktx.html