获取像 NSObject 这样的描述
Getting description like NSObject
如果您运行 Playgroud
以下内容
class Test {
var description:String {
return "This is Test"
}
}
class Test1:NSObject {
override var description:String {
return "This is Test"
}
}
let t = Test()
println(t)
let t1 = Test1()
println(t1)
您看到第一个 println
将输出一些调试器简介,而第二个回显 description
的内容。
所以:有没有一种方法可以让 "normal" 类 与 NSObject
的子 类 一样,所以 println
会尊重description
属性?
的内容
这是因为您正在打印 class 的实例。在 swift 中,class 不是 NSObject
的默认子 class。要使 class 成为 NSObject
的子类,您必须像对第二个 class 所做的那样指定它。这是修改后的代码:
class Test {
var description:String {
return "This is Test"
}
}
class Test1:NSObject {
override var description:String {
return "This is Test"
}
}
let t = Test()
println(t.description)
let t1 = Test1()
println(t1)
引用自The Swift Programming Language,
Swift classes do not inherit from a universal base class. Classes you
define without specifying a superclass automatically become base
classes for you to build upon.
来自 println()
API 文档:
/// Writes the textual representation of `object` and a newline character into
/// the standard output.
///
/// The textual representation is obtained from the `object` using its protocol
/// conformances, in the following order of preference: `Streamable`,
/// `Printable`, `DebugPrintable`.
///
/// Do not overload this function for your type. Instead, adopt one of the
/// protocols mentioned above.
func println<T>(object: T)
因此,为了获得自定义 println()
表示,您的 class 必须(例如)明确采用 Printable
协议:
class Test : Printable {
var description:String {
return "This is Test"
}
}
但是,这在 Xcode 6.1.1 的 Playground 中不起作用。
它已在 Xcode 6.3 测试版中修复。来自发行说明:
• Adding conformances within a Playground now works as expected, ...
我在 API headers 中找不到这个,但似乎 NSObject
(及其子classes)已知符合Printable
。
因此自定义描述适用于您的 Test1
class.
在 Swift 2 (Xcode 7) 中, Printable
协议已重命名
到 CustomStringConvertible
:
class Test : CustomStringConvertible {
public var description:String {
return "This is Test"
}
}
let t = Test()
print(t)
// This is Test
如果您运行 Playgroud
以下内容class Test {
var description:String {
return "This is Test"
}
}
class Test1:NSObject {
override var description:String {
return "This is Test"
}
}
let t = Test()
println(t)
let t1 = Test1()
println(t1)
您看到第一个 println
将输出一些调试器简介,而第二个回显 description
的内容。
所以:有没有一种方法可以让 "normal" 类 与 NSObject
的子 类 一样,所以 println
会尊重description
属性?
这是因为您正在打印 class 的实例。在 swift 中,class 不是 NSObject
的默认子 class。要使 class 成为 NSObject
的子类,您必须像对第二个 class 所做的那样指定它。这是修改后的代码:
class Test {
var description:String {
return "This is Test"
}
}
class Test1:NSObject {
override var description:String {
return "This is Test"
}
}
let t = Test()
println(t.description)
let t1 = Test1()
println(t1)
引用自The Swift Programming Language,
Swift classes do not inherit from a universal base class. Classes you define without specifying a superclass automatically become base classes for you to build upon.
来自 println()
API 文档:
/// Writes the textual representation of `object` and a newline character into
/// the standard output.
///
/// The textual representation is obtained from the `object` using its protocol
/// conformances, in the following order of preference: `Streamable`,
/// `Printable`, `DebugPrintable`.
///
/// Do not overload this function for your type. Instead, adopt one of the
/// protocols mentioned above.
func println<T>(object: T)
因此,为了获得自定义 println()
表示,您的 class 必须(例如)明确采用 Printable
协议:
class Test : Printable {
var description:String {
return "This is Test"
}
}
但是,这在 Xcode 6.1.1 的 Playground 中不起作用。 它已在 Xcode 6.3 测试版中修复。来自发行说明:
• Adding conformances within a Playground now works as expected, ...
我在 API headers 中找不到这个,但似乎 NSObject
(及其子classes)已知符合Printable
。
因此自定义描述适用于您的 Test1
class.
在 Swift 2 (Xcode 7) 中, Printable
协议已重命名
到 CustomStringConvertible
:
class Test : CustomStringConvertible {
public var description:String {
return "This is Test"
}
}
let t = Test()
print(t)
// This is Test