Trong Objective-C, người ta có thể thêm một phương pháp description
đến lớp học của họ để hỗ trợ trong gỡ lỗi:Tương đương Swift là gì - [Mô tả NSObject]?
@implementation MyClass
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p, foo = %@>", [self class], foo _foo];
}
@end
Sau đó, trong chương trình gỡ rối, bạn có thể làm:
po fooClass
<MyClass: 0x12938004, foo = "bar">
tương đương trong Swift là gì ? sản lượng REPL Swift có thể hữu ích:
1> class MyClass { let foo = 42 }
2>
3> let x = MyClass()
x: MyClass = {
foo = 42
}
Nhưng tôi muốn thay đổi hành vi này để in ra cửa sổ Console:
4> println("x = \(x)")
x = C11lldb_expr_07MyClass (has 1 child)
Có cách nào để làm sạch println
sản lượng này? Tôi đã nhìn thấy các Printable
giao thức:
/// This protocol should be adopted by types that wish to customize their
/// textual representation. This textual representation is used when objects
/// are written to an `OutputStream`.
protocol Printable {
var description: String { get }
}
I figured này tự động sẽ được "nhìn thấy" bởi println
nhưng nó không xuất hiện là trường hợp:
1> class MyClass: Printable {
2. let foo = 42
3. var description: String { get { return "MyClass, foo = \(foo)" } }
4. }
5>
6> let x = MyClass()
x: MyClass = {
foo = 42
}
7> println("x = \(x)")
x = C11lldb_expr_07MyClass (has 1 child)
Và thay vào đó tôi phải gọi một cách rõ ràng mô tả:
8> println("x = \(x.description)")
x = MyClass, foo = 42
Có cách nào tốt hơn không?
Tìm thấy tuyệt vời! Tôi sẽ gửi một bản in ra-ra-đa của "swift -i sample.swift" và "swift sample.swift && sample" khác nhau. – Jason
Cảm ơn bạn đã thông tin về điều đó. Tôi đã cố gắng in ra trong một sân chơi và thực sự nó không hoạt động ngay bây giờ. Tốt nó nghe nó hoạt động trong một ứng dụng. –
Có thể in không hoạt động trong sân chơi, nhưng iff lớp xuống từ NSObject – dar512