ใน swift 2.0 print()
จะเพิ่มอักขระขึ้นบรรทัดใหม่โดยอัตโนมัติ ใน Swift 1.2 println()
และprint()
เคยเป็นฟังก์ชันแยกกัน ดังนั้นฉันจะพิมพ์ข้อความและไม่เพิ่มบรรทัดใหม่ได้อย่างไรเนื่องจาก swift ไม่มีฟังก์ชันการพิมพ์ที่ไม่ต่อท้ายบรรทัดใหม่อีกต่อไป
ใน swift 2.0 print()
จะเพิ่มอักขระขึ้นบรรทัดใหม่โดยอัตโนมัติ ใน Swift 1.2 println()
และprint()
เคยเป็นฟังก์ชันแยกกัน ดังนั้นฉันจะพิมพ์ข้อความและไม่เพิ่มบรรทัดใหม่ได้อย่างไรเนื่องจาก swift ไม่มีฟังก์ชันการพิมพ์ที่ไม่ต่อท้ายบรรทัดใหม่อีกต่อไป
คำตอบ:
เริ่มต้นใน Swift 2.0 วิธีการพิมพ์ที่แนะนำโดยไม่ขึ้นบรรทัดใหม่คือ:
print("Hello", terminator:"")
seperator
พารามิเตอร์ คุณสามารถเพิกเฉยได้เพราะมีค่าเริ่มต้นfunc print(items: Any..., separator: String = default, terminator: String = default)
default
เท่ากับอะไร?
default
เป็นตัวยึดสำหรับค่าเริ่มต้น ตามหลักการแล้วเอกสารควรมีค่าที่แท้จริงไม่ใช่ตัวยึดตำแหน่ง
print
ฟังก์ชั่นได้เปลี่ยนไปอย่างสิ้นเชิงตั้งแต่การปรับปรุงSwiftในช่วงปลายตอนนี้มันดูง่ายขึ้นมากและมีวิธีการพิมพ์ลงคอนโซลมาตรฐานที่แตกต่างกัน
ลายเซ็นวิธีสำหรับการพิมพ์มีลักษณะเช่นนี้
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.
การเชื่อมต่อ
print("This is wild", terminator: " ")
print("world")
พิมพ์:
This is wild world
ดังนั้นการใช้เทอร์มิเนเตอร์คุณควรระมัดระวังว่าเนื้อหาเกี่ยวข้องกับบรรทัดเดียวกัน
การพิมพ์วัตถุด้วย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)
พิมพ์:
<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>
เข้าสู่ไฟล์โดยใช้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)!)
}
}
ตอนนี้ใช้การพิมพ์เพื่อสตรีม
print("First of all", to: &myStream )
print("Then after", to: &myStream)
print("And, finally", to: &myStream)
พิมพ์เป็นไฟล์:
First of all
Then after
And finally
กำหนดเอง
extension Person: CustomReflectable {
var customMirror: Mirror {
return Mirror(self, children: ["name": name, "address1": addresses[0], "address2": addresses[1]])
}
}
ตอนนี้ในดีบักเกอร์ lldb ถ้าคุณใช้คำสั่ง po
> po person
ผลลัพธ์จะเป็นแบบนี้
▿ <name: Jack, addresses: Tampere Helsinki 0x7feb82f26e80>
- name : "Jack"
▿ address1 : Address
- city : "Helsinki"
▿ address2 : Address
- city : "Tampere"
print("foo", appendNewLine: false)
คอมไพล์ แต่ผลลัพธ์เป็น(foo), false
และบรรทัดใหม่จะถูกต่อท้าย!
appendNewline
(ตัวพิมพ์เล็กl
)
ใน Swift 2.0 คุณสามารถทำได้:
รุ่นพื้นฐาน
print("Hello World")
result "Hello World\n"
การใช้เทอร์มิเนเตอร์
print("Hello World", terminator:"")
result "Hello World"
ใช้ตัวคั่น
print("Hello", "World", separator:" ")
result "Hello World\n"
การใช้ตัวคั่นและเทอร์มิเนเตอร์
print("Hello", "World", separator:" ", terminator:"")
result "Hello World"
ใช้ตัวแปรเดียว
var helloworld = "Hello World"
print(helloworld)
result "Hello World\n"
ใช้สองตัวแปร
var hello = "Hello"
var world = "World"
print (hello, world)
result "Hello World\n"
" "
หากคุณต้องการบรรทัดเดียวกันในลูป:
for i in 1...4
{
print("", i, separator: " ", terminator:"")
}
print()
เอาต์พุต: 1 2 3 4