print
সুইফ্টের দেরি সংশোধন করার পরে ফাংশনটি সম্পূর্ণ পরিবর্তিত হয়েছে , এখন এটি অনেক সহজ দেখাচ্ছে এবং স্ট্যান্ডার্ড কনসোলে মুদ্রণের পদ্ধতিতে ভিন্নতা রয়েছে।
মুদ্রণের জন্য পদ্ধতিটির স্বাক্ষরটি এরকম কিছু দেখাচ্ছে,
public func print<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream
এবং এখানে কিছু ব্যবহারের কেস রয়েছে,
print("Swift is awesome.")
print("Swift", "is", "awesome", separator:" ")
print("Swift", "is", "awesome", separator:" ", terminator:".")
ছাপে:
Swift is awesome.
Swift is awesome
Swift is awesome.
concatenating
print("This is wild", terminator: " ")
print("world")
ছাপে:
This is wild world
সুতরাং, টার্মিনেটর ব্যবহার করে, আপনার সাবধান হওয়া উচিত যে বিষয়বস্তুগুলি একই লাইনের সাথে প্রাসঙ্গিক।
কাস্টমস্ট্রিং কনভার্টেবলের সাথে মুদ্রণ অবজেক্ট
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)
ছাপে:
<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)
}
}
এখন, lldb এর সাহায্যে আপনি po কমান্ড ব্যবহার করতে পারেন এবং এটি lldb কনসোলে এই হিসাবে বস্তুটি মুদ্রণ করবে,
<name: Jack, addresses: Helsinki,Tampere 0x60c000044860>
টেক্সটআউটপুট স্ট্রিম ব্যবহার করে ফাইলে লগইন করা হচ্ছে
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)!)
}
}
এখন, প্রবাহে প্রিন্ট ব্যবহার করে,
print("First of all", to: &myStream )
print("Then after", to: &myStream)
print("And, finally", to: &myStream)
ফাইলগুলি প্রিন্ট করুন:
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]])
}
}
এখন, lldb ডিবাগারে, আপনি যদি কমান্ড পো ব্যবহার করেন,
> po person
ফলাফলটি এমন কিছু হবে,
▿ <name: Jack, addresses: Tampere Helsinki 0x7feb82f26e80>
- name : "Jack"
▿ address1 : Address
- city : "Helsinki"
▿ address2 : Address
- city : "Tampere"