selector

Swift-Printing and Dumping

2019-03-27  本文已影响0人  小驴拉磨

你真的会使用Swift的print吗?
学习一门语言一般咋们学习第一个句代码就是输出语句,Swift也是一样的,但是Swift的打印输出语句真的很强大。
Swift中提供的打印输出语句:

print(Any)

print的方法原型是

func print(_ items: Any..., separator: String = " ", terminator: String = "\n")
参数:
tems:要打印的项为零或多个。
separator:要在每个项目之间分隔符。默认值是单个空格(" ")。
terminator:打印完所有项目后要打印的字符串。默认值是换行符(\ n)。

从上面的方法中可以看出separator和terminator都是可以更换的,使用实例:

print("One two three four five")
// Prints "One two three four five"
print(1...5)
// Prints "1...5"
print(1.0, 2.0, 3.0, 4.0, 5.0)
// Prints "1.0 2.0 3.0 4.0 5.0"

要打印由空格以外的其他内容分隔的项目,请将字符串作为separator。

print(1.0, 2.0, 3.0, 4.0, 5.0, separator: " ... ")
// Prints "1.0 ... 2.0 ... 3.0 ... 4.0 ... 5.0"

每个调用的输出默认包含换行符。要打印没有尾随换行符的项目,请将空字符串作为。print(_:separator:terminator:)terminator

for n in 1...5 {
    print(n, terminator: "")
}
// Prints "12345"
// 也可换成别的字符串,例如用逗号隔开
for n in 1...5 {
    print(n, terminator: ",")
}
// Prints "1,2,3,4,5,"

重头戏:Swift的print不止支持输出打印还可以写入到变量中,方法如下:

print(_:separator:terminator:to:)
// 方法原型
func print<Target>(_ items: Any..., separator: String = " ", terminator: String= "\n", to output: inout Target) where Target : TextOutputStream

output:用于接收每个项目的文本表示的输出流。
TextOutputStream:是文本输出流协议
使用实例:

var range = "My range: "
print(1...5, to: &range)
// range == "My range: 1...5\n"

var separated = ""
print(1.0, 2.0, 3.0, 4.0, 5.0, separator: " ... ", to: &separated)
// separated == "1.0 ... 2.0 ... 3.0 ... 4.0 ... 5.0\n"

var numbers = ""
for n in 1...5 {
    print(n, terminator: "", to: &numbers)
}
// numbers == "12345"

类似调试输出还有几个:

print(1...5)
// Prints "1...5"
       
debugPrint(1...5)
// Prints "ClosedRange(1...5)"
let person = Person()
person.name = "lidong"
person.age = 14

debugPrint(person)
//<Swift_Dome.Person: 0x6000012fa310>
print(person)
//<Swift_Dome.Person: 0x6000012fa310>
dump(person)
//▿ <Swift_Dome.Person: 0x6000012fa310> #0
//    - super: NSObject
//    ▿ name: Optional("lidong")
//    - some: "lidong"
//    ▿ age: Optional(14)
//    - some: 14

全部参数的方法

func dump<T>(_ value: T, name: String? = nil, indent:Int = 0, maxDepth: Int = .max, maxItems: Int = .max) -> T
参数列表
value:要输出到target流的值。
name:写入内容时使用的标签value。当nil被传递,被省略的标签。默认是nil。
indent:用作输出的每一行的缩进的空格数。默认是0。
maxDepth:写入具有嵌套组件的值的内容时要下降的最大深度。默认是。Int.max
maxItems:要写入完整内容的最大元素数。默认是。Int.max

根据不同的场景使用不同的方式。参考

上一篇下一篇

猜你喜欢

热点阅读