• /// 获取类型 type(of: router.rootVC) /// 获取类型 string type(of: router.rootVC).description() type(of: router.rootVC).description().components(separatedBy: ".")[1]; 提取一下代码 ...
    /// 获取类型
    type(of: router.rootVC)
    
    /// 获取类型 string
    type(of: router.rootVC).description()
    
    type(of: router.rootVC).description().components(separatedBy: ".")[1];
    

    提取一下代码

    extension NSObject
    {
        // MARK:返回className
        var className:String{
            get{
              let name =  type(of: self).description()
                if(name.contains(".")){
                    return name.components(separatedBy: ".")[1];
                }else{
                    return name;
                }
    
            }
        }
    
    }
    展开全文
  • 今天完善夫特架子,导航里面用夫特获取类名的时候,突然很懵逼,居然木有。类(OC),只好自己研究下了,写了一个获取类名的扩展名,后来发现有个.self的方法,也尝试了下哈,看下图 print...

    今天完善夫特架子,导航里面用夫特获取类名的时候,突然很懵逼,居然木有。类(OC),只好自己研究下了,写了一个获取类名的扩展名,后来发现有个.self的方法,也尝试了下哈,看下图

    print(UIScreenEdgePanGestureRecognizer().ClassName)
    print(UIScreenEdgePanGestureRecognizer.self)
    print(type(of: UIScreenEdgePanGestureRecognizer.self))

    打印结果看下图

    看到这里相信也不用我来解释了哈,我就说个结果吧:

    :(获取类名)用.self

    类对象:(获取类对象)用ClassName

    最后贴上类名的代码

    extension NSObject
    {
        // MARK:返回className
        var ClassName:String{
            get{
                let name =  type(of: self).description()
                if(name.contains(".")){
                    return name.components(separatedBy: ".")[1];
                }else{
                    return name;
                }
                
            }
        }
        
    }

    手敲不容易,麻烦点个赞,谢谢〜

    展开全文
  • 本文转载自《获取对象类型》我们一再强调,如果遵循规则的话,Swift 会是一门相当安全的语言:不会存在类型的疑惑,绝大多数的内容应该能在编译期间就唯一确定。但是不论是 Objective-C 里很多开发者早已习惯的灵活...

    本文转载自《获取对象类型》

    我们一再强调,如果遵循规则的话,Swift 会是一门相当安全的语言:不会存在类型的疑惑,绝大多数的内容应该能在编译期间就唯一确定。但是不论是 Objective-C 里很多开发者早已习惯的灵活性,还是在程序世界里总是千变万化的需求,都不可能保证一成不变。我们有时候也需要引入一定的动态特性。而其中最为基本但却是最为有用的技巧是获取任意一个实例类型。

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

    NSDate *date = [NSDate date];
    NSLog(@"%@",NSStringFromClass([date class]));
    // 输出:
    // __NSDate

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

    let date = NSDate()
    let name: AnyClass! = object_getClass(date)
    print(name)
    // 输出:
    // __NSDate

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

    let date = NSDate()
    let name = date.dynamicType
    print(name)
    // 输出:
    // __NSDate

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

    let string = "Hello"
    let name = string.dynamicType
    print(name)
    // 输出:
    // String

    可以看到对于 Swift 的原生类型,这种方式也是可行的。(值得指出的是,其实这里的真正的类型名字还带有 module 前缀,也就是 Swift.String。直接 print 只是调用了 CustomStringConvertible 中的相关方法而已,你可以使用 debugPrint 来进行确认。关于更多地关于 print 和 debugPrint 的细节,可以参考 print 和 debugPrint 一节的内容。)

    在 Swift 1.2 之前,直接对 Swift 内建的非 AnyObject 类型使用 .dynamicType 可能会导致编译错误或者无法得到正确结果。但是随着 Swift 不断完善和改进,现在我们已经可以统一地使用 .dynamicType 来获取一个对象的类型了。

    备注:dynamicType在Swift 3.0中已经被舍弃,我们可以使用type(of:...)来代替

    let date = NSDate()
    let name = type(of:date)
    print(name)
    // 输出:
    // __NSDate
    展开全文
  • swift 引入了命名空间的概念,所以我们要先拼接命名空间 /// 通过类名创建类 /// /// - Parameter className: 类名 /// - Returns: 类遵循的协议 func getJumpViewController(className:String) -> ...

    swift 引入了命名空间的概念,所以我们要先拼接命名空间

    /// 通过类名创建类
        ///
        /// - Parameter className: 类名
        /// - Returns: 类遵循的协议
        func getJumpViewController(className:String) -> someOneAnswerProtocol {
            //1.这是获取命名空间
            guard let name = Bundle.main.object(forInfoDictionaryKey: "CFBundleExecutable") as? String else {
               return DataAnswerViewController.init()
            }
            //2.命名空间和类名拼接
            let className = name + "." + "DataAnswerViewController"
            //3.转化为类
            let objectClass:AnyClass?  = NSClassFromString(className)
            //4.swift 中通过class创建一个对象必须告诉系统class类型
            guard let classType = objectClass as? UIViewController.Type else {
                return DataAnswerViewController.init()
            }
            //4.通过Class创建对象
            let handleObject = classType.init()
            return handleObject as! someOneAnswerProtocol
        }
    
    展开全文
  • // swift4中通过字符串名转化成类,需要在字符串名前加上项目的名称  let clsName = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String//这是获取项目的名称,  let className=clsName! + ...

     //  swift4中通过字符串名转化成类,需要在字符串名前加上项目的名称

            let clsName = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String//这是获取项目的名称,

            let className=clsName! + "." + self.classArr[indexPath.row]

            let viewC = NSClassFromString(className)!as! UIViewController.Type //这里需要指定类的类型XX.Type

            let vc=viewC.init()

            self.navigationController?.pushViewController(vc, animated: true)

    展开全文
  • 通常来说,命名空间是唯一识别的一套名字,这样当对象来自不同的地方但是名字相同的时候就不会含糊不清了。 为什么需要命名空间(namespace) Objective-C 没有命名空间的,在应用开发时,所有的代码和引用的静态库...
  • import Foundation /// 如果需要用对应的类型,字典定义Dictionary<String, Any>,对应value为Int8.self、Int16.self,下面用到的方法都需要更改为Dictionary<String, Any&...
  • 最近想简单封装一下FMDB,简单实现根据模型创建表的功能。 又研究了下runtime,解析property_getAttributes即可获得属性类型名称等 @protocol Aprotocol NSObject> @end ...N
  • 一、什么是面向对象 在讲对象的同时需要了解一下类的概念,说简单点,类就是把所有关于这对象的归类,比如人类,水果,汽车等,人类中有男人,有女人,还有.....呵呵,开玩笑。水果中有香蕉,苹果,菠萝,西瓜等等,...
  • UIView继承自UIResponder,可以利用UIResponder的nextResponder()方法返回该视图的控制器,以下是官方文档对该方法的描述: The UIResponder class does not store or set the next responder automatically, ...
  • Swift 5 Type Metadata 详解

    2019-03-01 15:36:19
    Swift 5 出了,主要是 ABI 稳定了,从 ABI Dashboard 来看为了解决 ABI 稳定问题,对 type metadata 也有不少改动。众所周知,我们 App 的 JSON 库 HandyJSON 是强依赖 metadata 结构的,如果 metadata 有大规模的...
  • 对象对象是一个动态的概念,每一个对象都存在着有别于其他对象的属于自己的独特属性和行为。(类的实例话) 属性:类的属性,也叫类的成员变量。成员变量不能独立于类而存在,成员变量描述类的对象的状态数据。 ...
  • ========Objective-C 的运行时,来获取类并按照原来的方式转换: object_getClass 是一个定义在 ObjectiveC 的 runtime 中的方法,它可以接受任意的 AnyObject! 并返回它的类型 AnyClass! (注意这里的...
  • Swift语言中的面向对象特性
  • 在oc中将字符串转换成类名直接调用NSClassFromString("classname")即可,但是到了swift中变的麻烦多了 swift中如果要将字符串转换为类型需要以下几个步骤 1.获取包名 var name = Bundle.main.object...
  • 在OC中我们直接可以用如下方法即可 ...在Swift中,并没有 .class 属性或者方法, 便可以用如下方法class Person { } class AsiaMen: Person { } class ViewController: UIViewController { overri
  • 前言: 在一些大型的项目中常常在加载页面的时候根据服务器请求下来的数据动态创建视图控制器对象,最近的一个项目就有这一方面的需求,加载页面之前需要先请求服务器...在swift获取类关键步骤是通过这个方法,但...
  • Xcode更新过后,有些方法都进行了改变,Demo中有变化的都进行了简单的标记,具体以后遇见再说创建一个UIView类,用init方法创建两种类型,显示多标签,创建静态方法进行调用,创建类方法进行调用首先代码:用init...
  • 原文:http://coolketang.com/staticCoding/5a9925ad9f5454507417fc93.html1. 类的静态方法,也称为类型方法。实例方法是被类型的某个实例调用的方法,而静态方法则是被类型本身调用的方法。 2....
1 2 3 4 5 ... 20
收藏数 1,868
精华内容 747