gpt4 book ai didi

swift - -[NSObject description] 的 Swift 等价物是什么?

转载 作者:IT王子 更新时间:2023-10-29 04:55:26 25 4
gpt4 key购买 nike

在 Objective-C 中,可以在类中添加一个 description 方法来帮助调试:

@implementation MyClass
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p, foo = %@>", [self class], foo _foo];
}
@end

然后在调试器中,您可以:

po fooClass
<MyClass: 0x12938004, foo = "bar">

Swift 中的等价物是什么? Swift 的 REPL 输出可能会有所帮助:

  1> class MyClass { let foo = 42 }
2>
3> let x = MyClass()
x: MyClass = {
foo = 42
}

但我想覆盖此行为以打印到控制台:

  4> println("x = \(x)")
x = C11lldb_expr_07MyClass (has 1 child)

有没有办法清理这个 println 输出?我看过 Printable 协议(protocol):

/// 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 }
}

我认为这会被 println 自动“看到”,但事实并非如此:

  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)

相反,我必须显式调用描述:

 8> println("x = \(x.description)")
x = MyClass, foo = 42

有没有更好的办法?

最佳答案

要在 Swift 类型上实现它,您必须实现 CustomStringConvertible 协议(protocol),然后还实现一个名为 description 的字符串属性。

例如:

class MyClass: CustomStringConvertible {
let foo = 42

var description: String {
return "<\(type(of: self)): foo = \(foo)>"
}
}

print(MyClass()) // prints: <MyClass: foo = 42>

注意:type(of: self) 获取当前实例的类型,而不是显式写入“MyClass”。

关于swift - -[NSObject description] 的 Swift 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24108634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com