Ank*_*oel 100 swift swift2 swift3
在swift 2.0中,print()自动添加换行符.在迅速1.2,println()和print()以前是独立的功能.那么如何打印一些文本而不添加换行符,因为swift不再具有不附加换行符的打印功能.
che*_*iel 183
从Swift 2.0开始,推荐的无换行打印方法是:
print("Hello", terminator:"")
Run Code Online (Sandbox Code Playgroud)
San*_*eep 66
print自Swift的后期修订以来,函数已完全改变,现在它看起来更简单,并且有一些方法可以打印到标准控制台.
打印的方法签名看起来像这样,
public func print<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream
Run Code Online (Sandbox Code Playgroud)
这里有一些用例,
print("Swift is awesome.")
print("Swift", "is", "awesome", separator:" ")
print("Swift", "is", "awesome", separator:" ", terminator:".")
Run Code Online (Sandbox Code Playgroud)
打印:
Swift is awesome.
Swift is awesome
Swift is awesome.
Run Code Online (Sandbox Code Playgroud)
串联
print("This is wild", terminator: " ")
print("world")
Run Code Online (Sandbox Code Playgroud)
打印:
This is wild world
Run Code Online (Sandbox Code Playgroud)
因此,使用终结符时,应注意内容与同一行相关.
使用CustomStringConvertible打印对象
struct Address {
let city: String
}
class Person {
let name = "Jack"
let addresses = [
Address(city: "Helsinki"),
Address(city: "Tampere")
]
}
extension Person: CustomStringConvertible {
var description: String {
let objectAddress = unsafeBitCast(self, to: Int.self)
return String(format: "<name: \(name) %p>", objectAddress)
}
}
let jack = Person()
print(jack)
Run Code Online (Sandbox Code Playgroud)
打印:
<name: Jack 0x608000041c20>
Run Code Online (Sandbox Code Playgroud)
CustomDebugStringConvertible
extension Person: CustomDebugStringConvertible {
var debugDescription: String {
let objectAddress = unsafeBitCast(self, to: Int.self)
let addressString = addresses.map { $0.city }.joined(separator: ",")
return String(format: "<name: \(name), addresses: \(addressString) %p>",objectAddress)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,使用lldb,你可以使用po 命令,它将在lldb控制台中打印对象,
<name: Jack, addresses: Helsinki,Tampere 0x60c000044860>
Run Code Online (Sandbox Code Playgroud)
使用TextOutputStream记录到文件
struct MyStreamer: TextOutputStream {
lazy var fileHandle: FileHandle? = {
let fileHandle = FileHandle(forWritingAtPath: self.logPath)
return fileHandle
}()
var logPath: String = "My file path"
mutating func write(_ string: String) {
fileHandle?.seekToEndOfFile()
fileHandle?.write(string.data(using:.utf8)!)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,使用print来流式传输,
print("First of all", to: &myStream )
print("Then after", to: &myStream)
print("And, finally", to: &myStream)
Run Code Online (Sandbox Code Playgroud)
打印到文件:
First of all
Then after
And finally
Run Code Online (Sandbox Code Playgroud)
CustomReflectable
extension Person: CustomReflectable {
var customMirror: Mirror {
return Mirror(self, children: ["name": name, "address1": addresses[0], "address2": addresses[1]])
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在lldb调试器中,如果你使用命令po,
> po person
Run Code Online (Sandbox Code Playgroud)
结果将是这样的,
? <name: Jack, addresses: Tampere Helsinki 0x7feb82f26e80>
- name : "Jack"
? address1 : Address
- city : "Helsinki"
? address2 : Address
- city : "Tampere"
Run Code Online (Sandbox Code Playgroud)
Mor*_*son 11
在Swift 2.0中,您可以这样做:
基本版
print("Hello World")
result "Hello World\n"
Run Code Online (Sandbox Code Playgroud)
使用终结器
print("Hello World", terminator:"")
result "Hello World"
Run Code Online (Sandbox Code Playgroud)
使用分隔符
print("Hello", "World", separator:" ")
result "Hello World\n"
Run Code Online (Sandbox Code Playgroud)
使用分隔符和终止符
print("Hello", "World", separator:" ", terminator:"")
result "Hello World"
Run Code Online (Sandbox Code Playgroud)
使用一个变量
var helloworld = "Hello World"
print(helloworld)
result "Hello World\n"
Run Code Online (Sandbox Code Playgroud)
使用两个变量
var hello = "Hello"
var world = "World"
print (hello, world)
result "Hello World\n"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60822 次 |
| 最近记录: |