在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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)