如何在Swift中打印类名?

21

在Swift中,我们不能再使用"self.class"。

我想在NSObject的子类中打印自己的类名以用于description方法。

我该如何打印它?或者我应该创建一个新的方法来获取类名?


我查看了以下问题,但是没有找到答案。

如何在Swift中打印变量的类型或类?

如何找出对象的类型(在Swift中)?

import UIKit

class PrintClassName: NSObject {
    override init() {
        super.init()
        println("\(self.dynamicType)")
        // Prints "(Metatype)"

        println("\(object_getClassName(self))");
        // Prints "0x7b680910 (Pointer)"

        println("\(self.className)")
        // Compile error!

        println(PrintClassName.self)
        // Prints "(Metatype)"
    }
}

 

2014.08.25 后记

我查看了这个问题。

Swift类内省和泛型

但是println(PrintClassName.self)输出"(Metatype)"

我想要在不写类名的情况下获取类名。


1
尽管它并没有回答你的问题,但有趣的是,在创建OSX应用程序时,className属性在Swift中可以使用。它被添加为NSObject的扩展。出于某种原因,这个扩展没有应用到iOS版本的NSObject上。也许这只是一个bug。 - Mallioch
1
你正在使用Beta 6吗?self.className应该会给你想要的,因为你继承了NSObject。或者可以使用reflect(self).summary - vladof81
1
@Mallioch self.className 返回错误"'PrintClassName'没有名为'className'的成员"...好的,我明白这是个bug。 - satomikko94
1
@vladof 是的,我正在使用XCode6 beta6。但是self.className返回错误。但是reflect(self).summary返回ProjectName.ClassName!! 谢谢! - satomikko94
你可能正在寻找这个 https://dev59.com/0mAg5IYBdhLWcg3wE3jQ#25345480 - ZaEeM ZaFaR
1个回答

39
import Foundation

class PrintClassName : NSObject {
    override init() {
        super.init()
        println(NSStringFromClass(self.dynamicType))
    }
}

哦!返回的是 ProjectName.ClassName !! 謝謝! - satomikko94
5
您可以使用 - self.className.componentsSeparatedByString(".").last! 来分离您的类名。替代方法为:self.className用"."分割,然后选择最后一个元素。请注意保持其原意并使其更易理解,不包括任何额外内容。 - ZaEeM ZaFaR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接