zoukankan      html  css  js  c++  java
  • 通过类名自动生成类的方法

    Cocoa提供了NSClassFromString和NSSelectorFromString方法,使用起来很简单:
    Class stringclass = NSClassFromString(@"NSString");

    为什么要这么做呢?直接使用Class不是更方便?通常情况下是,但有些场景下这个方法会很有用。首先,可以得知是否存在某个class,NSClassFromString 会返回nil,如果运行时不存在该class的话。比如可以检查NSClassFromString(@"NSRegularExpression")是否为nil来判断是否为

    另一个使用场景是根据不同的输入返回不同的class或method。比如你在解析一些数据,每个数据项都有要解析的字符串以及自身的类型(String,Number,Array)。你可以在一个方法里搞定这些,也可以使用多个方法。其中一个方法是获取type,然后使用if来调用匹配的方法。另一种是根据type来生成一个selector,然后调用之。以下是两种实现方式:
    
    
    - (void)parseObject:(id)object {
        for (id data in object) {
            if ([[data type] isEqualToString:@"String"]) {
                [self parseString:[data value]]; 
            } else if ([[data type] isEqualToString:@"Number"]) {
                [self parseNumber:[data value]];
            } else if ([[data type] isEqualToString:@"Array"]) {
                [self parseArray:[data value]];
            }
        }
    }
    - (void)parseObjectDynamic:(id)object {
        for (id data in object) {
            [self performSelector:NSSelectorFromString([NSString stringWithFormat:@"parse%@:", [data type]]) withObject:[data value]];
        }
    }
    - (void)parseString:(NSString *)aString {}
    - (void)parseNumber:(NSString *)aNumber {}
    - (void)parseArray:(NSString *)aArray {}

    可一看到,你可以把7行带if的代码变成1行。将来如果有新的类型,只需增加实现方法即可,而不用再去添加新的 else if
  • 相关阅读:
    mysql 修改表
    mac下安装MySQL 5.7
    win&linux下path中%%与$ 以及;与:区别,
    PATH
    转 path设置方式
    MyEclipse乱码问题
    03 最大的数据库 information_schema介绍以及sql注入第一题题解
    02.mysql数据库 基本命令
    01.Windows进入MySQL数据库
    Web web4
  • 原文地址:https://www.cnblogs.com/wskgjmhh/p/4930966.html
Copyright © 2011-2022 走看看