Swift-AnyOject与OC中Id对比

作者: 改变自己_now | 来源:发表于2016-01-19 09:52 被阅读2677次

1、id的兼容性

Swift有一种AnyObject类型,用来代表某个对象。它和Objective-C中的id类型很相似。Swift把id导入为AnyObject,使你能够在编写类型安全的Swift代码的同时,保留不确定类型对象(untyped object)的灵活性。

例如,像id一样,你可以为AnyObject类型的常量或变量赋任何类型的值。你还可以为变量重新赋一个另一种类型值。

   var testObject : AnyObject = UITableViewCell()
   testObject = NSDate()

因为声明为AnyObject的对象的类型要到运行时才被确定,所以可能会导致你不经意地编写了不安全的代码。不论是在Swift中还是在Objective-C中,试图调用一个不存在的方法,都会触发“无法识别的方法选择器”(unrecognized selector)错误。如下面的代码回是程序崩溃

var testOject:AnyObject =  NSDate(timeIntervalSinceReferenceDate: 3);
    
    let  myCount = testOject.count

swift中使用if-let来处理触发“无法识别的方法选择器”(unrecognized selector)错误。下面的写法就不会出现程序崩溃

 var testOject:AnyObject = NSDate(timeIntervalSinceReferenceDate: 3);
    
    if let test = testOject.count  {
    
        print("该方法调用成功")
    }
    
    else {
    
        print("该方法调用不成功")
    }

2、AnyObject向下类型转换

当AnyObject对象的底层类型已经知道,或可以被推断出来时,我们通常会把它向下转换为更加特定的类型。但是因为AnyObject可能代表任何类型的对象,类型转换并不能保证成功。

你可以使用条件类型转换操作符(as?)来进行转换操作。它将返回目标类型的可选值(optional value):

例如下面的例子:

let userDefaults = NSUserDefaults.standardUserDefaults()
let lastRefreshDate : AnyObject? = userDefaults.objectForKey("LastRefreshDate")
if let date = lastRefreshDate as? Date {
print("\(date.timeIntervalSinceReferenceDate)")
}

如果你确知对象的类型,你也可以使用强制类型转换操作符(as!)。

let testDate = lastReferenceDate as! NSDate
let timeInterval = myDate.timeIntervalSinceReferenceDate

不过,如果强制类型转换失败了,编译器会报错!!

相关文章

  • Swift-AnyOject与OC中Id对比

    1、id的兼容性 Swift有一种AnyObject类型,用来代表某个对象。它和Objective-C中的id类型...

  • swift基础小结1

    swift基础小结 for 循环OC与Swift对比 While循环与downhill循环 OC与swift使用的...

  • 知识汇总

    OC中instancetype与id的区别 区别1: 在ARC(Auto Reference Count)环境下:...

  • OC中的id类型

    OC中的id类型 id类型 静态类型和动态类型 为什么要有动态类型? id数据类型与静态类型 1. 静态类型和动态...

  • OC中instancetype与id的区别

    我们在查找API的时候,经常都会见到instancetype和id,他们区别并不大,都可以代表任何类型的对象.但是...

  • 内存管理

    对象操作与OC方法的对应 id obj = [[NSObject alloc] init];id obj = [N...

  • Swift--AnyObject初步探索

    Swift 日常笔记碎片知识 在Swift中AnyObject对应OC中的id,用于保存对象类型,因此继承与NSO...

  • Swift简介(二)

    在学习Swift的过程中,加入与OC的对比,这样更好理解,记忆. 1.0 if和switch分支: --if: /...

  • Runtime

    OC中的id类型 id的类型定义 struct objc_object在runtime中定义 NSObject底...

  • OC 中类的实质

    id id 可以表示任何 OC 中的对象,在 runtime 中对 id 是这么定义的 所以 id 其实是一个指向...

网友评论

    本文标题:Swift-AnyOject与OC中Id对比

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