Swift-AnyOject与OC中Id对比
来源:互联网 发布:sql入门书籍推荐 编辑:程序博客网 时间:2024/06/06 09:20
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! NSDatelet timeInterval = myDate.timeIntervalSinceReferenceDate
不过,如果强制类型转换失败了,编译器会报错!!
阅读全文
0 0
- Swift-AnyOject与OC中Id对比
- Swift与OC语法对比
- Swift与OC的对比
- Swift与OC闭包回调对比
- OC与swift混编-oc中调用swift方法
- OC与Swift混编之Swift中使用OC
- OC 与 Swift混编 Swift的闭包传值到OC中
- OC与Swift调用函数方法格式对比
- Swift与OC中拷贝与可变性
- Swift与OC中拷贝与可变性
- OC中instancetype与id的区别
- OC中instancetype与id的区别
- 项目中swift与OC混编
- Swift的基本语法与OC的基本语法对比 (Swift)
- oc与swift混编,OC调用swift,swift调用OC
- Swift与OC混编
- OC与Swift混编
- OC与Swift混编
- Linux_170713_NAT技术与代理服务器
- Java集合---HashSet的源码分析
- 静态链接库(LIB)和动态链接库(DLL),DLL的静态加载和动态加载,两种LIB文件。
- lintcode 两数之和(Two Sum )(Java)
- jquery插件写法
- Swift-AnyOject与OC中Id对比
- JavaScript 表单及表单验证
- Python3中 对local和nonlocal 关键字的改善认识(新手向)
- jqgrid初始化参数及colModel参数
- TCP/IP协议4层模型
- textview中maxLength和maxEMS的区别
- ubuntu 15.10 安装配置 JDK1.8
- 地图的四着色 中南1508
- Spring定时任务