ด้วย Swift 4 Apple แนะนำผ่านคำเตือนคอมไพเลอร์ใหม่ว่าเราหลีกเลี่ยงการใช้#selector
ในสถานการณ์นี้ ต่อไปนี้เป็นวิธีที่ปลอดภัยกว่ามากในการทำสิ่งนี้ให้สำเร็จ:
ก่อนอื่นให้สร้าง var สันหลังยาวที่การแจ้งเตือนสามารถใช้งานได้:
lazy var didBecomeActive: (Notification) -> Void = { [weak self] _ in
// Do stuff
}
หากคุณจำเป็นต้องมีการแจ้งเตือนที่เกิดขึ้นจริงจะรวมเพียงแทนที่ด้วย_
notification
ต่อไปเราตั้งค่าการแจ้งเตือนเพื่อดูว่าแอปพลิเคชันทำงานอยู่หรือไม่
func setupObserver() {
_ = NotificationCenter.default.addObserver(forName: .UIApplicationDidBecomeActive,
object: nil,
queue:.main,
using: didBecomeActive)
}
การเปลี่ยนแปลงครั้งใหญ่ที่นี่ก็คือแทนที่จะเรียก a #selector
ตอนนี้เราเรียก var ที่สร้างไว้ด้านบน สิ่งนี้สามารถกำจัดสถานการณ์ที่คุณได้รับตัวเลือกที่ไม่ถูกต้องเกิดปัญหา
ในที่สุดเราก็ลบผู้สังเกตการณ์
func removeObserver() {
NotificationCenter.default.removeObserver(self, name: .UIApplicationDidBecomeActive, object: nil)
}
NSNotificationCenter
ไม่ได้คิดว่าการใช้ ขอบคุณ!