美文网首页
iOS-使用NSClassFromString()创建类

iOS-使用NSClassFromString()创建类

作者: 我遇见了猫在潜水 | 来源:发表于2018-03-19 15:14 被阅读0次

一.什么是NSClassFromString()

NSClassFromString()和NSStringFromClass()是一对互逆的方法。

看一下官方文档的声明

public func NSStringFromClass(_aClass:Swift.AnyClass) ->String

public func NSClassFromString(_aClassName:String) ->Swift.AnyClass?

NSClassFromString()是通过字符串的名称来创建类,

NSStringFromClass()是通过类的名称获取字符串。

主要看NSClassFromString()方法,可以看到返回值为“ Swift.AnyClass?”

首先可以看到返回值是一个可选型,当类不存在时会返回nil。

其次返回值是任意类,在使用过程中一般需要用as?转化为指定类。

二.NSClassFromString()的作用

作用主要分为两点:

1.动态创建类的对象,主要应用于反射设计中。

2.创建类时避免了类不存在程序崩溃的情况。

下面通过代码看一下如何通过这个方法创建类:

首先先写一个方法通过传递进来的参数创建类

private func controller(dict:[String:String]) -> UIViewController {

        guard let clsName = dict["clsName"],

            let title = dict["title"],

            let imageName = dict["imageName"],

            let cls =NSClassFromString(Bundle.main.namespace+"."+ clsName)as?UIViewController.Type

            else{

                return UIViewController()

        }

        let vc = cls.init()

        vc.title= title

        let nav =YCNavigationController(rootViewController: vc)

        return nav

    }

然后写一个方法调用controller方法

private func setupChildControllers(){

        let array = [

            ["clsName":"YCHomeViewController","title":"首页","imageName":"image"],

            ["clsName":"YCMessageViewController","title":"消息","imageName":"image"],

            ["clsName":"YCDiscoverViewController","title":"发现","imageName":"image"],

            ["clsName":"YCProfileViewController","title":"我的","imageName":"image"]

        ]

        var arrayM = [UIViewController]()

        for dict in array{

            arrayM.append(controller(dict: dict))

        }

        viewControllers= arrayM

    }

最后在viewDidLoad中调用setupChildControllers()方法

override func viewDidLoad() {

        super.viewDidLoad()

        setupChildControllers()

    }

至此就可以创建出四个对象。

相关文章

网友评论

      本文标题:iOS-使用NSClassFromString()创建类

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