swift2.0 通过类名创建UIViewController

swift2.0 通过类名创建UIViewController,第1张

概述在OC里面我们可以很简单的通过类名创建一个实例,swift里面我们怎么办呢 OC代码如下: Class className = NSClassFromString(displayClassName);UIViewController *view = [[className alloc]init]; swift2.0 有了很大的改变,这里不是我们讨论的重点,swift里面我们不能简单的使用NSCl

在OC里面我们可以很简单的通过类名创建一个实例,swift里面我们怎么办呢

OC代码如下:

Class classname = NSClassFromString(displayClassname);UIVIEwController *vIEw = [[classname alloc]init];

swift2.0 有了很大的改变,这里不是我们讨论的重点,swift里面我们不能简单的使用NSClassFromString方法了

方法一:

swift提供了@objc()方法,只要在我们的想要创建的类里面实现这个方法就行了,比如这样:

////  WaterGlassAnimationVIEwController.swift//  TestDemoPark////  Created by ss on 15/10/9.//  copyright © 2015年 Yasin. All rights reserved.//import UIKit@objc(WaterGlassAnimationVIEwController)class WaterGlassAnimationVIEwController: UIVIEwController {
然后我们在使用的时候就可以直接使用NSClassFromString了
        let classnameStr = "WaterGlassAnimationVIEwController"        if let classname = NSClassFromString(classnameStr) {            if let vIEwClass = classname as? UIVIEwController.Type {                let vIEw = vIEwClass.init()                vIEw.Title = TitleArr[indexPath.row]                self.navigationController?.pushVIEwController(vIEw,animated: true)            }        }
但是这样我们需要在类上面实现方法,有时候也不是很方便
方法二:
        let classnameStr = <span><span >"WaterGlassAnimationVIEwController"</span><span></span></span>        if let vIEw = swiftClassFromString(classnameStr) {            vIEw.Title = TitleArr[indexPath.row]            self.navigationController?.pushVIEwController(vIEw,animated: true)        }
我们需要写一个swiftClassFromString自定义方法
    func swiftClassFromString(classname: String) -> UIVIEwController? {        //方法 NSClassFromString 在Swift中已经不起作用了no effect,需要适当更改        //官方文档方法:let myPersonClass: AnyClass? = NSClassFromString("MyGreatApp.Person")        if  let appname = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundlename") as? String {            let classstringname = "_TtC\(appname.characters.count)\(appname)\(classname.characters.count)\(classname)"            let  cls: AnyClass? = NSClassFromString(classstringname)            assert(cls != nil,"class not found,please check classname")            if let vIEwClass = cls as? UIVIEwController.Type {                let vIEw = vIEwClass.init()                return vIEw            }        }        return nil;    }
总结

以上是内存溢出为你收集整理的swift2.0 通过类名创建UIViewController全部内容,希望文章能够帮你解决swift2.0 通过类名创建UIViewController所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1083902.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存