print
chức năng đã thay đổi hoàn toàn kể từ phiên bản cuối của Swift , bây giờ nó trông đơn giản hơn nhiều và có nhiều biến thể của phương thức để in ra bảng điều khiển tiêu chuẩn.
Chữ ký phương thức cho bản in trông giống như thế này,
public func print<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream
Và đây là một số cách sử dụng,
print("Swift is awesome.")
print("Swift", "is", "awesome", separator:" ")
print("Swift", "is", "awesome", separator:" ", terminator:".")
Bản in:
Swift is awesome.
Swift is awesome
Swift is awesome.
Kết hợp
print("This is wild", terminator: " ")
print("world")
Bản in:
This is wild world
Vì vậy, sử dụng terminator, bạn nên cẩn thận rằng các nội dung có liên quan đến cùng một dòng.
Đối tượng in với 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)
Bản in:
<name: Jack 0x608000041c20>
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)
}
}
Bây giờ, với lldb , bạn có thể sử dụng lệnh po và nó sẽ in đối tượng như thế này trong bảng điều khiển lldb,
<name: Jack, addresses: Helsinki,Tampere 0x60c000044860>
Đăng nhập vào tệp bằng 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)!)
}
}
Bây giờ, sử dụng tính năng in để phát trực tuyến,
print("First of all", to: &myStream )
print("Then after", to: &myStream)
print("And, finally", to: &myStream)
In ra tệp:
First of all
Then after
And finally
CustomReflectable
extension Person: CustomReflectable {
var customMirror: Mirror {
return Mirror(self, children: ["name": name, "address1": addresses[0], "address2": addresses[1]])
}
}
Bây giờ, trong trình gỡ lỗi lldb, nếu bạn sử dụng lệnh po,
> po person
Kết quả sẽ như thế này,
▿ <name: Jack, addresses: Tampere Helsinki 0x7feb82f26e80>
- name : "Jack"
▿ address1 : Address
- city : "Helsinki"
▿ address2 : Address
- city : "Tampere"