• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Harley
博客园    首页    新随笔    联系   管理    订阅  订阅

类型判断

类型判断与转换

1.在Object-C中我们经常会对一个id类型或者不确定具体类型的实例对象做类型判断,如isKindOfClass;在Swift中我们可以更简单来实现

参考:Type Casting

is类型检查运算符

//Object-C判断类型

UIView *v=XXX;

if([v isKindOfClass:[UIWindow class]) {

}

//Swift var v=XXX if v is UIWindow { }

 

2.在Object-C中我们要做类型转换可以直接使用C语言的方式来强制类型赋值,但在Swift中需要用as运算符实现

as 用于向上转型(upcasts) 
as? 和as! 用于向下转型(Downcasting)

//Object-C
for(UIViewController *ct in controllers)
{
    if([ct isKindOfClass:[MttBaseViewController class]])
    {
        NSLog(@"MttBaseViewController");
    }
    else if([ct isKindOfClass:[MttRootViewController class]])
    {
        NSLog(@"MttRootViewController");
    }
}

//Swift
for ct in controllers {
    if let mtt = ct as? MttBaseViewController {
            print("MttBaseViewController")
    } else if let nav = ct as? MttRootViewController {
            print("MttRootViewController")
    }
}

 

 

 

当不确定类型转换是否成功时,用类型转换的条件形式( as? ) 
as?如果失败会返回nil 
当确定一定是时,用强制形式式( as! )

 

 

两个方法的区别:

判断对象类型

-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例

-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例

测试实例: demo

 

 

类名作为参数进行传递

 1 let item= DoctorGroup()
 2 
 3 let a = InterfaceTests.obtainValues(subObject: item, fatherClass: Group.self)
 4 
 5 
 6 
 7 class func obtainValues<T>(subObject: T, fatherClass: AnyObject.Type) -> AnyCollection<Mirror.Child> {
 8 
 9         
10 
11         var so = type(of: subObject)
12 
13         
14 
15         log.info("---------->\(so), \(fatherClass)")
16 
17         
18 
19         while so != fatherClass {    //类与类之间的类型判断
20             print("------------>true")
21 
22         }
23 
24    }
View Code

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2018-04-09 14:09  Harely  阅读(357)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3