【问题标题】:Getting name of the class from an instance从实例中获取类的名称
【发布时间】:2011-01-14 02:59:24
【问题描述】:

我有以下问题:我得到了一个类的实例,想知道这个实例的类名。这个怎么弄?

【问题讨论】:

  • 也许改写您的问题或接受与问题匹配的答案?
  • @JasperBlues:完成,甚至没有意识到这有多受欢迎!

标签: iphone objective-c class instance classname


【解决方案1】:

NSStringFromClass([instance class]) 应该可以解决问题。

【讨论】:

  • 赞成回答这个问题,以便谷歌用户可以得到答案,而不是预测需求。
  • 记得#import <objc/objc-runtime.h>才能在实例上调用类。
【解决方案2】:

如果你只想测试一个对象,看看它是否是某个类的类型

BOOL test = [self isKindOfClass:[SomeClass class]];

【讨论】:

    【解决方案3】:

    从类本身

    -(NSString *) className
    {
        return NSStringFromClass([self class]);
    }
    

    【讨论】:

    • 绝对不想激怒您,但这是您个人资料中第二个与 iOS 相关的答案。在我看来,仅补充一点,我们可以在其实现中将实例称为“自我”。你会认为这大大增加了三年前接受的答案吗?
    • @danh 我看到你在追捕我。对你有好处!
    • 对不起,我刚点了这个,还在犹豫要不要说什么。只是想做一些温和的罗纹,但我知道在这些半不露面的环境中脾气很快就会变热。谢谢你的好脾气。 (事实上​​,+1 用于练习封装)。
    • 除了麻烦之外,这对答案没有任何帮助。
    • 应该把它变成一个类方法
    【解决方案4】:

    如果您正在查看如何在 Swift 中获取类名,您可以使用反射来获取有关对象的信息。

    let tokens = split(reflect(self).summary, { $0 == "." })
    if let typeName = tokens.last {
        println(typeName)
    }
    

    【讨论】:

    • 或者只是self.dynamicType
    【解决方案5】:

    你也可以使用[[self class] description]

    【讨论】:

      【解决方案6】:

      只需添加一个类别:

      NSObject+Extensions.h
      - (NSString *)className;
      
      NSObject+Extensions.m
      - (NSString *)className {
          return NSStringFromClass(self.class);
      }
      

      然后使用以下代码:

      NSString *className = [[SomeObject new] className];
      

      甚至:

      NSString *className = SomeObject.new.className;
      

      要在任何地方使用它,请将类别添加到 YourProject.pch 文件。

      【讨论】:

      • 如果在 Swift 类上调用,这将返回一个命名空间的类名。
      【解决方案7】:

      OBJC:

      NSStringFromClass([instance class])
      

      SWIFT

      来自实例:

      String(describing: YourType.self)
      

      来自类型:

      String(describing: self)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-22
        • 2018-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多