Fork me on GitHub

Swift 中的 description

在 iOS 开发过程中,我们常常需要打印对象的信息,来辅助调试。默认情况下,当我们打印一个对象的时候,控制台会输出如下的信息:

1
<NSObject: 0x60000055c840>

这时我们会考虑重写 -description 方法,让打印的内容更加详细:

1
2
3
4
5
6
7
8
9
10
11
12
@interface Person()
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSUInteger age;
@property (nonatomic, assign) CGFloat weight;
@end

@implementation Person
- (NSString *)description {
// 保持系统原有的输出风格
return [NSString stringWithFormat:@"<%@: %p> (%@ %.2f %@)", self.class, self, _name, _weight, _age >= 18 ? @"成年": @"未成年"];
}
@end

那么 Swift 中如何进行自定义呢?

Swift 中则需要声明一个名为 description 的只读属性(类型为 String)。继承于 NSObject 及其子类的情况下需要加上 override。这样就能保持和 OC 一样的输出风格啦。

这里有一个完整的示例:

1
2
3
4
5
6
7
8
9
class Person: NSObject {
var name: String = ""
var age: UInt8 = 0
var weight: Float = 0

override var description: String {
return "<\(type(of: self)): \(String(format: "%p", self))> (\(name) \(String(format: "%.2f", weight)) \(age >= 18 ? "成年" : "未成年"))"
}
}
------------- 本文结束感谢您的阅读 -------------