OC中的反射机制

2018-11-26  本文已影响2人  小凡凡520

不能将 swift 中的自定义类进行反射,系统的类可以

class反射
// swift
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    
    if let clasName = NSClassFromString("Person") as? Person.Type {
        let person = clasName.init()
        
        print(person)
    }
}

// OC
Class class = NSClassFromString(@"Person");
Student *stu = [[class alloc] init];

// 输出:
<Person: 0x600000012800>
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    
    let name = NSStringFromClass(Person.classForCoder())
    print(name)
}

// 输出
<Person: 0x60400001c8b0>
Person
SEL的反射
- (void)setName {
    NSLog(@"test");
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    
    if let clasName = NSClassFromString("Person") as? Person.Type {
        let person = clasName.init()
        
        let sel = NSSelectorFromString("setName")
        
        person.perform(sel)
    }
}

// 输出
2018-11-26 15:31:45.972108+0800 Demo[5981:625183] test
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    
    if let clasName = NSClassFromString("Person") as? Person.Type {
        let person = clasName.init()
        
        let sel = NSSelectorFromString("setName")
        
        person.perform(sel)
        
        let className = NSStringFromSelector(sel)
        print(clasName)
    }
}
上一篇 下一篇

猜你喜欢

热点阅读