来自 电脑系统 2019-09-16 13:07 的文章
当前位置: 金沙澳门官网网址 > 电脑系统 > 正文

在swift里面通过类名来创建类

即使是动态创立,可是其必得选择持续,不知哪位大神知晓怎么着不用承继来完结动态生成类实例

        for i in 0..

网络搜到了章程 用继承完毕

}

}

// 上面是做个测验 获取新建虚构类的点子列表

class MyClass: NSObject {

var member = 10

override required init() {

print

}

              // 这里也是个坑 这种操作是不安全的  所以Swift供给大家必须那样包装一层 不然若直接采取block无法编写翻译!!!!

let newClass = objc_allocateClassPair(NSObject.classForCoder(), "MyClass", 0)

// 给类扩张四个方法

method_getImplementation(class_getInstanceMethod(self.classForCoder, Selector))

class_addMethod(newClass, Selector, method_getImplementation(class_getInstanceMethod(self.classForCoder, Selector)) , "v@:")

//注册那些类

objc_registerClassPair

              return nil

品尝用Runtime来动态成立类

感谢 @Mad_Mark  @搜狐大白

创办如下

 }

let className = NSStringFromClass

print(className)

let classType = NSClassFromString(className) as? MyClass.Type

if let type = classType {

let my = type.init()

print(my.member)

}

func dosome(aSelector:Selector)->IMP?{

如此就算能够创制了类 但是依旧不能够实例化

         // 比较难熬的是  方法已经增多上了 可是无力回天响应

anyClass 是三个合计 并不是三个类 所以并无法给anyClass 大概 anyObject 写延展 加方法

          var name_f = method_getName(temp)

/// 通过创立贰个类

           let swizzledImplementation = imp_implementationWithBlock(castedBlock)

}

           }

             var imp = method_getImplementation(temp)

           // 再次来到 newClass 的实例  让这几个法子的兑现转载到 newClass

             // 实验结束

               open override func forwardingTarget(for aSelector: Selector!) -> Any? {

             let instance: Any? = Protector

           // 成立一个虚构类 ENVISIONX斯维夫特TestNew  为品种名字  MyClass 为类名字

            let Protector: AnyClass? = newClass.self

写的有一点乱

ps: 为何作者一度在类用class_addMethod增加了这些艺术,不过却爱莫能助用performSelector调用呢? 求大神解答

extension UIResponder {

             return instance!

            var arguments = method_getNumberOfArguments(temp)

            print("方法名:(NSString(utf8String: name_s!)),参数个数:(arguments),编码方式(NSString(utf8String: encoding!)))")

本文由金沙澳门官网网址发布于电脑系统,转载请注明出处:在swift里面通过类名来创建类

关键词: