zoukankan      html  css  js  c++  java
  • Swift判断对象属于什么类型

    1.Objective-C 中常用的判断一个对象是属于哪个类的方法有下面两类:

    [obj1 isKindOfClass:[ClassA class]];
    [obj2 isMemberOfClass:[ClassB class]];

    结论:

    -isKindOfClass: 判断obj1是否是ClassA或者其子类的实例对象;
    -isMemberOfClass: 对obj2做出判断,当且仅当obj2的类型为ClassB时返回为真

    在 Swift 中如果写的是NSObject的子类的话

    class ClassA: NSObject { }
    class ClassB: ClassA { }
    
    let obj1: NSObject = ClassB()
    let obj2: NSObject = ClassB()
    
    obj1.isKindOfClass(ClassA.self)    // true
    obj2.isMemberOfClass(ClassA.self)  // false

    2.在 Swift 中提供了一个更简洁的写法:对于一个不确定的类型,我们可以使用is来进行判断。is在功能上相当于原来的isKindOfClass,可以检查一个对象是否属于某类型或其子类型。is和原来的区别主要在于它不仅可以用于class类型上,也可以对 Swift 的其他像是structenum类型进行判断。如下:

    class ClassA { }
    class ClassB: ClassA { }
    
    let obj: AnyObject = ClassB()
    
    if (obj is ClassA) {
        print("obj 属于 ClassA")
    }
    
    if (obj is ClassB) {
        print("obj 属于 ClassB")
    }

    另外,编译器将对这种检查进行必要性的判断:如果编译器能够唯一确定类型,那么is的判断就没有必要,编译器将会抛出一个警告,来提示你并没有转换的必要。如下:

    let string = "String"
    if string is String {
        // 
    }
    

    by:liming

      

  • 相关阅读:
    Tensorflow卷积接口总结
    《MuseGAN: Multi-track Sequential Generative Adversarial Networks for Symbolic Music Generation and Accompaniment》论文阅读笔记
    核函数
    KCF跟踪算法
    岭回归、lasso
    C++的命令行参数(gflag)
    Python的命令行参数(argparse)
    size_t为什么重要
    linux下caffe的命令运行脚本
    卡尔曼滤波
  • 原文地址:https://www.cnblogs.com/widgetbox/p/12996032.html
Copyright © 2011-2022 走看看