Swift ViewController 类名作为字符串

4

我有一个名为"MyViewController"的视图控制器,我想将一些值保存到用户默认设置中。作为键,我想使用类名“MyViewController”并追加一些字符串。在Swift中是否可以从类名获取字符串?谢谢任何帮助 :)

我有一个叫做'MyViewController'的ViewController,我想将一些值保存到用户默认设置中。我想使用类名"MyViewController"并追加一些字符串作为键。在Swift中,是否可以从类名中获取字符串?感谢任何帮助 :)
2个回答

4

也许有更好的方法,但据我所知,您可以通过classForCoder()(仅适用于NSObject子类)获取类名。从那里,您可以使用NSStringFromClass将类名转换为NSString。唯一的问题是名称通常会被破坏,例如“__lldb_expr_690.MyViewController”。您可以通过显式设置名称来解决此问题,例如:

@objc(MyViewController) class MyViewController: UIViewController {
    func aMethod() {
        let defaults = NSUserDefaults.standardUserDefaults()

        defaults.setObject("Some Object", forKey: NSStringFromClass(self.classForCoder))
        defaults.synchronize()
        // Has set "Some Object" for key "MyViewController"
    }
}

1
谢谢你的回答,虽然这是一个重复的问题,但这是唯一有效的答案。其他问题的答案根本不起作用。 - borchero
1
@borchero 请查看此链接 https://stackoverflow.com/a/47468006/2287422,它更简单。 - prabhu

0
class MyOwnClass {    
}

var myVar1 = NSString()
var myVar2 = MyOwnClass()

println(_stdlib_getTypeName(myVar1))    // Gives "NSString"
println(_stdlib_getTypeName(myVar2))    // Gives "_TtC15__lldb_expr_26410MyOwnClass"

1
其实,名字前面的内容并不重要,但是 _TtC15_lldb_expr_26410 在我下一次启动程序时会发生变化,这样就不太好了,如果它不变就太好了^^ - borchero

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