แตกต่างจาก Objective-C Swift ไม่มีตัวประมวลผลล่วงหน้าดังนั้นยังมีวิธีที่จะเลิกสมาชิกของคลาสด้วยตนเองหรือไม่?
ฉันกำลังมองหาบางอย่างที่คล้ายกับนี้:
-(id)method __deprecated;
แตกต่างจาก Objective-C Swift ไม่มีตัวประมวลผลล่วงหน้าดังนั้นยังมีวิธีที่จะเลิกสมาชิกของคลาสด้วยตนเองหรือไม่?
ฉันกำลังมองหาบางอย่างที่คล้ายกับนี้:
-(id)method __deprecated;
คำตอบ:
คุณสามารถใช้แท็กที่มีอยู่ตัวอย่างเช่น:
@available(*, deprecated)
func myFunc() {
// ...
}
โดยที่ * เป็นแพลตฟอร์ม (iOS, iOSApplicationExtension, macOS, watchOS, tvOS, * สำหรับทุกคน ฯลฯ )
นอกจากนี้คุณยังสามารถระบุรุ่นของแพลตฟอร์มจากการที่มันเป็นintroduced
, deprecated
, obsoleted
, renamed
และmessage
:
@available(iOS, deprecated:6.0)
func myFunc() {
// calling this function is deprecated on iOS6+
}
Or
@available(iOS, deprecated: 6.0, obsoleted: 7.0, message: "Because !")
func myFunc() {
// deprecated from iOS6, and obsoleted after iOS7, the message "Because !" is displayed in XCode warnings
}
หากโครงการของคุณกำหนดเป้าหมายหลายแพลตฟอร์มคุณสามารถใช้หลายแท็กดังนี้:
@available(tvOS, deprecated:9.0.1)
@available(iOS, deprecated:9.1)
@available(macOS, unavailable, message: "Unavailable on macOS")
func myFunc() {
// ...
}
*, deprecated: 10.0
จะเลิกใช้มันสำหรับiOS 10
, tvOS 10
ฯลฯ ผมคิดว่าเราไม่ควรรวม*
กับหมายเลขรุ่น? ความคิดใด ๆ เกี่ยวกับวิธีการทำดีกว่า?
@available(*, deprecated: 10.0)
ดังนั้นจึงเป็นความคิดที่ดีมากควรรหัสไม่ได้ทำงานเฉพาะบน iOS
เริ่มต้นSwift 3และSwift 4หมายเลขเวอร์ชันเป็นทางเลือก ตอนนี้คุณสามารถพิมพ์:
@available(*, deprecated)
func foo() {
// ...
}
หรือถ้าคุณต้องการข้อความไปด้วย:
@available(*, deprecated, message: "no longer available ...")
func foo() {
// ...
}
@available(*, deprecated, message = "no longer available ...")
รวมอยู่เมื่อรวมข้อความ
คุณสามารถใช้สิ่งนี้เพื่อแก้ไขรายการของคุณด้วย func ใหม่โดยอัตโนมัติ
@available(*, deprecated, renamed: "myNewFunc")
func myOldFunc() {
// ...
}
func myNewFunc() {
// ...
}
แทนที่จะเป็น * คุณสามารถใช้ swift สำหรับหมายเลขเวอร์ชัน swift
ฟังก์ชันที่เลิกใช้แล้วจะสร้างคำเตือน แต่ยังสามารถเรียกใช้ได้ (คำเตือน)
ฟังก์ชั่นที่ล้าสมัยจะหยุดไม่ให้ถูกเรียกอย่างสมบูรณ์ (ข้อผิดพลาด)
@available(swift, deprecated: 4.0, obsoleted: 4.2, message: "This will be removed in v4.2, please migrate to ...")
หรือใช้ตัวเลือกอื่น ๆ เช่น iOS, macOS, watchOS, tvOS ...
@available(iOS, deprecated:7.0, obsoleted: <ObsoletedVersion>, renamed: "myFuncNew", message: "Please use new method - myFuncNew()")
func myFuncOld() {
//
}
ถ้าdeployment target
เป็น9.0
และ
1. <ObsoletedVersion>
== 10.0
-warning
2. <ObsoletedVersion>
== 8.0
-compile error
=
s จะถูกแทนที่ด้วย:
s