美文网首页
Swift 获取对象类型,对象类型转换成字符串替换OC中NSSt

Swift 获取对象类型,对象类型转换成字符串替换OC中NSSt

作者: Lukiwen | 来源:发表于2017-05-15 17:50 被阅读0次

在 Objective-C 中我们可以轻而易举地做到这件事,使用 -class 方法就可以拿到对象的类,我们甚至可以用 NSStringFromClass 将它转换为一个能够打印出来的字符串:

NSDictionary *dic = [NSDictionary new];
NSLog(@"%@",NSStringFromClass([dic class]));
// 输出:
// __NSDictionary

在 Swift 中,我们会发现不管是纯 Swift 的 class 还是 NSObject 的子类,都没有像原来那样的 class() 方法来获取类型了。对于 NSObject 的子类,因为其实类的信息的存储方式并没有发生什么大的变化,因此我们可以求助于 Objective-C 的运行时,来获取类并按照原来的方式转换:

let dic = NSDictionary()
let name: AnyClass! = object_getClass(dic)
//如果需要将类型转换成字符串加上下一句
let className = String(describing: name!)
print(name)
print(className)
// 输出:
// __NSDictionary====>这里输出的AnyClass
// __NSDictionary====>这里输出的是字符串

其中 object_getClass 是一个定义在 ObjectiveC 的 runtime 中的方法,它可以接受任意的 AnyObject! 并返回它的类型 AnyClass! (注意这里的叹号,它表明我们甚至可以输入 nil,并期待其返回一个 nil)。在 Swift 中其实为了获取一个 NSObject 或其子类的对象的实际类型,对这个调用其实有一个好看一些的写法,那就是 dynamicType。上面的代码用一种 "更 Swift" 一些的语言转换一下,会是这个样子:

let dic = NSDictionary()
let name = type(of:dic)
print(name)
// 输出:
// __NSDictionary

很好,似乎我们的问题能解决了。但是仔细想想,我们上面用的都是 Objective-C 的动态特性,要是换成一个 Swift 内建类型的话,会怎么样呢?比如原生的 String,

let string = "Hello"
let name = type(of:string)
print(name)
// 输出:
// String
//转成字符串与相同

可以看到对于 Swift 的原生类型,这种方式也是可行的

相关文章

  • Swift 获取对象类型,对象类型转换成字符串替换OC中NSSt

    在 Objective-C 中我们可以轻而易举地做到这件事,使用 -class 方法就可以拿到对象的类,我们甚至可...

  • Swift与OC部分方法、类型区别与互转

    Swift与OC转换 1、获取对象类型 共有: 2、函数入参中对象转化 OC转Swift,对象变为可选类型 Swi...

  • Swift 中获取对象类型

    Objective-C风格获取对象类型: Swift 风格获取对象类型:

  • swift 笔记2

    字符串的介绍 字符串在任何的开发中使用都是非常频繁的 OC和Swift中字符串的区别 在OC中字符串类型时NSSt...

  • iOS swift-字符串

    OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC...

  • swift基础---数据类

    swift类型介绍 跟OC中一样,swift中的数据类型也有:整型、浮点型、对象类型、结构体类型等等。 首先先学习...

  • iOS swift-开发笔记

    //*****//获取对象类型 object_getClass(对象) //*****//数字类型字符串转Int ...

  • 10.Swift中字符串的使用

    OC和swift中字符串的区别: 1.在OC中字符串的类型是NSString,swift中字符串的类型是Strin...

  • Swift--字符串--02

    字符串基础 字符串在OC与Swift中的区别:在OC中字符串类型是NNString,在Swift中字符串类型是St...

  • Swift笔记<三>字符串

    1.字符串的基本使用 OC与Swift中字符串的区别OC中字符串类型是NSString,Swift中字符串类型是S...

网友评论

      本文标题:Swift 获取对象类型,对象类型转换成字符串替换OC中NSSt

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