นี่คือการเปลี่ยนแปลงที่ถูกสร้างขึ้นมาในคำขอดึงนี้เนื่องจากความจริงที่ว่า interpolating Optional(...)
เข้าไปในสตริงผลลัพธ์มักจะเป็นที่ไม่พึงประสงค์และโดยเฉพาะอย่างยิ่งจะแปลกในกรณีที่มี optionals ท่านสามารถเข้าดูการสนทนาแบบเต็มของการเปลี่ยนแปลงนี้ในรายชื่อทางไปรษณีย์ที่นี่
ดังที่ได้กล่าวไว้ในการอภิปรายคำขอดึงข้อมูล (แม้ว่าจะไม่ใช่ Xcode ก็ตาม) - วิธีหนึ่งที่ดีกว่าเล็กน้อยในการปิดเสียงเตือนมากกว่าการใช้String(describing:)
คือการเพิ่มนักแสดงลงในประเภทที่เป็นทางเลือกของสิ่งที่คุณกำลังแก้ไขตัวอย่างเช่น:
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i as Int?)")
print("description of d: \(d as Double?)")
ซึ่งสามารถสรุปได้ว่าas Optional
:
print("description of i: \(i as Optional)")
print("description of d: \(d as Optional)")
ใน Swift 5 ที่มีระบบแก้ไขสตริงใหม่ที่SE-0228 แนะนำอีกทางเลือกหนึ่งคือการเพิ่มappendInterpolation
โอเวอร์โหลดแบบกำหนดเองสำหรับDefaultStringInterpolation
:
extension DefaultStringInterpolation {
mutating func appendInterpolation<T>(optional: T?) {
appendInterpolation(String(describing: optional))
}
}
var i: Int? = 5
var d: Double? = nil
print("description of i: \(optional: i)")
print("description of d: \(optional: d)")
และหากต้องการคุณสามารถลบป้ายอาร์กิวเมนต์เพื่อปิดใช้งานคำเตือนทั้งหมดภายในโมดูล (หรือภายในไฟล์ใดไฟล์หนึ่งหากคุณทำเครื่องหมายเป็นfileprivate
):
extension DefaultStringInterpolation {
mutating func appendInterpolation<T>(_ optional: T?) {
appendInterpolation(String(describing: optional))
}
}
var i: Int? = 5
var d: Double? = nil
print("description of i: \(i)")
print("description of d: \(d)")
แม้ว่าโดยส่วนตัวแล้วฉันอยากจะเก็บป้ายกำกับอาร์กิวเมนต์ไว้