在Swift中如果想要以如下方式执行NSLog,则编译器必定抱怨:
class Foo {} NSLog("%@",Foo())
因为Foo是原生Swift类不是继承自NSObject,而NSLog需要其Description方法,所以我们必须使Foo派生自NSObject,然后重载Description方法:
class Foo:NSObject { override var description: String {return "大熊猫侯佩"} }
NSLog也支持字符串内插显示,这时你可以不从NSObject中派生,你只要遵守CustomDebugStringConvertible协议即可:
class Tom:CustomDebugStringConvertible{ var debugDescription: String {return "勒布朗-詹姆斯"} } NSLog("\(Tom())")