1. 对象方法,要用具体对象调用
extension String{
public func strToClass()->UIViewController{
let clsName = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String//这是获取项目的名称,
let className=clsName! + "." + self
let viewC = NSClassFromString(className)!as! UIViewController.Type //这里需要指定类的类型XX.Type
let vc=viewC.init()
return vc
}
}
let vc = "字符串".strToClass()
2.类方法,用扩展的类名去调用
extension UIViewController{
class func strToClass(classstring:String)->UIViewController{
let clsName = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String//这是获取项目的名称,
let className=clsName! + "." + classstring
let viewC = NSClassFromString(className)!as! UIViewController.Type //这里需要指定类的类型XX.Type
let vc=viewC.init()
return vc
}
}
调用:UIViewController.strToClass(classstring: "字符串")
3.静态方法,用扩展的类名去调用
extension String{
static func strToClass(classstring:String)->UIViewController{
let clsName = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String//这是获取项目的名称,
let className=clsName! + "." + self
let viewC = NSClassFromString(className)!as! UIViewController.Type //这里需要指定类的类型XX.Type
let vc=viewC.init()
return vc
}
}
调用:String.strToClass(classstring: "字符串")
如果扩展的是类,方法关键字可以用class,也可以用static,用扩展的类调用方法;如果扩展的是基本数据类型,可以添加static方法,用扩展的类型去调用,或者添加的是对象方法,用对象去调用。
4.扩展构造器
extension mult { init(x: a, y: b) { } }
5.扩展计算属性
extension Int { var add: Int {return self + 100 } var sub: Int { return self - 10 } var mul: Int { return self * 10 } var div: Int { return self / 5 } }
调用:let addition = 3.add