সুইফটে এনএসনিটিফিকেশন সেন্টার অ্যাডঅবার্সার


392

আপনি কীভাবে ডিফল্ট বিজ্ঞপ্তি কেন্দ্রে সুইফ্টে কোনও পর্যবেক্ষক যুক্ত করবেন? আমি কোডের এই লাইনটি পোর্ট করার চেষ্টা করছি যা ব্যাটারির স্তর পরিবর্তিত হলে একটি বিজ্ঞপ্তি প্রেরণ করে।

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryLevelChanged:) name:UIDeviceBatteryLevelDidChangeNotification object:nil];

আপনি বিশেষভাবে কি জিজ্ঞাসা করছেন? নির্বাচক কীভাবে কাজ করে?
nschum

1
আমি বুঝতে পারিনি "সুইফ্ট" টাইপটি কেবল স্ট্রিং। ডক্সে এর কোনও উল্লেখ নেই।
বেরি ব্লু

উত্তর:


442

এটি অবজেক্টিভ-সি এপিআই এর সমান, তবে সুইফটের সিনট্যাক্স ব্যবহার করে।

সুইফট 4.2 এবং সুইফট 5:

NotificationCenter.default.addObserver(
    self,
    selector: #selector(self.batteryLevelChanged),
    name: UIDevice.batteryLevelDidChangeNotification,
    object: nil)

যদি আপনার পর্যবেক্ষক কোনও উদ্দেশ্য-সি অবজেক্ট থেকে উত্তরাধিকারী না @objcহন তবে এটি নির্বাচক হিসাবে ব্যবহার করার জন্য আপনাকে অবশ্যই আপনার পদ্ধতিটি উপস্থাপন করতে হবে।

@objc private func batteryLevelChanged(notification: NSNotification){     
    //do stuff using the userInfo property of the notification object
}

দেখুন NSNotificationCenter ক্লাস রেফারেন্স , উদ্দেশ্য সি API গুলির সাথে আলাপচারিতার


3
ধন্যবাদ! আমি সুইফটে নির্বাচকটির নাম কীভাবে পাস করব জানি না।
বেরি ব্লু

14
@ বেরি ব্লু, উপরের সমাধানটি কি আপনার পক্ষে কাজ করেছে? আমি বিশ্বাস করি যদি আপনার ফাংশনটি প্যারামিটার হিসাবে এনএসনোটিকেশন গ্রহণ করে তবে আপনার "ব্যাটারি লেভেল চ্যাঞ্জড" "ব্যাটারি লেভেল চ্যাঞ্জড:" এ পরিবর্তন করতে হবে।
ওলশানস্ক

1
@ ওলশানস্ক হ্যাঁ, আপনি ঠিক বলেছেন। আপনার দরকার নেই ধন্যবাদ!
বেরি ব্লু

UIDeviceBatteryLevelDidChangeNotificationউদ্ধৃতিতে নেই কেন ? এটি একটি স্ট্রিং টাইপ।
কিমিক্লাস

13
ক্লাস বা লক্ষ্য পদ্ধতিটি যে কোনওর সাথে উল্লেখ করাতে ভুলবেন না @objc
ক্লাস

757

সুইফট 4.0 এবং এক্সকোড 9.0+:

প্রেরণ (পোস্ট) বিজ্ঞপ্তি:

NotificationCenter.default.post(name: Notification.Name("NotificationIdentifier"), object: nil)

অথবা

NotificationCenter.default.post(name: Notification.Name("NotificationIdentifier"), object: nil, userInfo: ["Renish":"Dadhaniya"])

(প্রাপ্ত) বিজ্ঞপ্তি পান:

NotificationCenter.default.addObserver(self, selector: #selector(self.methodOfReceivedNotification(notification:)), name: Notification.Name("NotificationIdentifier"), object: nil)

প্রাপ্ত বিজ্ঞপ্তির জন্য ফাংশন-পদ্ধতি হ্যান্ডলার:

@objc func methodOfReceivedNotification(notification: Notification) {}

সুইফট ৩.০ এবং এক্সকোড ৮.০+:

প্রেরণ (পোস্ট) বিজ্ঞপ্তি:

NotificationCenter.default.post(name: Notification.Name("NotificationIdentifier"), object: nil)

(প্রাপ্ত) বিজ্ঞপ্তি পান:

NotificationCenter.default.addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification(notification:)), name: Notification.Name("NotificationIdentifier"), object: nil)

প্রাপ্ত বিজ্ঞপ্তির জন্য পদ্ধতি হ্যান্ডলার:

func methodOfReceivedNotification(notification: Notification) {
  // Take Action on Notification
}

বিজ্ঞপ্তি সরান:

deinit {
  NotificationCenter.default.removeObserver(self, name: Notification.Name("NotificationIdentifier"), object: nil)
}

সুইফট 2.3 এবং এক্সকোড 7:

প্রেরণ (পোস্ট) বিজ্ঞপ্তি

NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil)

বিজ্ঞপ্তি (প্রাপ্ত) পান

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification(_:)), name:"NotificationIdentifier", object: nil)

প্রাপ্ত বিজ্ঞপ্তির জন্য পদ্ধতি হ্যান্ডলার

func methodOfReceivedNotification(notification: NSNotification){
  // Take Action on Notification
}


Historicতিহাসিক এক্সকোড সংস্করণগুলির জন্য ...



প্রেরণ (পোস্ট) বিজ্ঞপ্তি

NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil)

বিজ্ঞপ্তি (প্রাপ্ত) পান

NSNotificationCenter.defaultCenter().addObserver(self, selector: "methodOfReceivedNotification:", name:"NotificationIdentifier", object: nil)

বিজ্ঞপ্তি সরান

NSNotificationCenter.defaultCenter().removeObserver(self, name: "NotificationIdentifier", object: nil)
NSNotificationCenter.defaultCenter().removeObserver(self) // Remove from all notifications being observed

প্রাপ্ত বিজ্ঞপ্তির জন্য পদ্ধতি হ্যান্ডলার

func methodOfReceivedNotification(notification: NSNotification) {
  // Take Action on Notification
}

ক্লাস বা @objc এর সাথে লক্ষ্য পদ্ধতিটি এনটেট করুন

@objc private func methodOfReceivedNotification(notification: NSNotification) {
  // Take Action on Notification
}

// Or

dynamic private func methodOfReceivedNotification(notification: NSNotification) {
  // Take Action on Notification
}

21
ক্লাস বা লক্ষ্য পদ্ধতিটি যে কোনওর সাথে উল্লেখ করাতে ভুলবেন না @objc
ক্লাস

1
@ গুফানসু আপনি কি নিশ্চিত? আমি বিবেচনা করি যে এটি যখন খাঁটি সুইফ্ট শ্রেণীর হয় তখন আপনাকে এটি যুক্ত করতে হবে।
ক্লাস

10
methodOFReceivedNoticationহয় অবশ্যই dynamicএনএসবজেক্টের সাবক্লাসের সাথে টীকাযুক্ত হতে হবে বা সদস্য হতে হবে।
ক্লাস

1
যদি তা না হয় তবে আমি রানটাইম সতর্কতা পেয়েছি object 0x7fd68852d710 of class 'TestNotifications.MyObject' does not implement methodSignatureForSelector: -- trouble ahead,Unrecognized selector -[TestNotifications.MyObject methodOFReceivedNotication:]
ক্লাস

2
@ টেলরআলার্ড, আমার উত্তর পর্যালোচনা করার জন্য আপনাকে অনেক ধন্যবাদ। আমি আপনার পরামর্শ সত্যিই প্রশংসা করছি। আমি এটা পরিবর্তন করেছি। এটি পর্যালোচনা করুন।
রিনিশ দধনিয়া

46

এটি করার একটি দুর্দান্ত উপায় হ'ল প্রায়শই উদ্দেশ্য-সি কোড থেকে ব্যবহৃত পদ্ধতিটির addObserver(forName:object:queue:using:)চেয়ে addObserver(_:selector:name:object:)পদ্ধতিটি ব্যবহার করা। প্রথম বৈকল্পিকের সুবিধাটি হ'ল আপনাকে @objcআপনার পদ্ধতিতে বৈশিষ্ট্যটি ব্যবহার করতে হবে না :

    func batteryLevelChanged(notification: Notification) {
        // do something useful with this information
    }

    let observer = NotificationCenter.default.addObserver(
        forName: NSNotification.Name.UIDeviceBatteryLevelDidChange,
        object: nil, queue: nil,
        using: batteryLevelChanged)

এবং আপনি চাইলে এমনকি কোনও পদ্ধতির পরিবর্তে কেবল একটি ক্লোজার ব্যবহার করতে পারেন:

    let observer = NotificationCenter.default.addObserver(
        forName: NSNotification.Name.UIDeviceBatteryLevelDidChange,
        object: nil, queue: nil) { _ in print("🔋") }

আপনি বিজ্ঞপ্তিটি পরে শুনতে বন্ধ করতে প্রত্যাবর্তিত মানটি ব্যবহার করতে পারেন:

    NotificationCenter.default.removeObserver(observer)

এই পদ্ধতিটি ব্যবহার করার ক্ষেত্রে আরও একটি সুবিধা ছিল যা হ'ল এটি আপনাকে নির্বাচক স্ট্রিংগুলি ব্যবহারের প্রয়োজন হয় না যা সংস্থাপক দ্বারা স্থিরভাবে পরীক্ষা করা যায় না এবং পদ্ধতিটির নতুন নামকরণ করা হলে ভাঙ্গা ভঙ্গুর ছিল, তবে সুইফট ২.২ এবং পরে অন্তর্ভুক্ত #selector এক্সপ্রেশন যে সমস্যাটি সমাধানের।


7
এটা অসাধারণ! সম্পূর্ণতার জন্য আমি কেবল নিবন্ধভুক্ত উদাহরণও দেখতে চাই। এটি addObserver(_:selector:name:object:) নিবন্ধভুক্ত করার পদ্ধতিটি একেবারেই আলাদা । আপনাকে অবজেক্টটি ফেরত রাখতে হবে addObserverForName(_:object:queue:usingBlock:)এবং এটিকে দিতে হবেremoveObserver:
লুকাস গুসসেন

1
প্রত্যাশিত প্রত্যাশীদের ডি-নিবন্ধকরণ অন্তর্ভুক্ত করার জন্য এটি আপডেট করা দরকার addObserverForName(_:object:queue:usingBlock:)
হাইপারবোল

3
এটি সংযোজক বা রেনিশের (এই মন্তব্যের সময় উপরে উভয়) এর চেয়ে অনেক ভাল উত্তর কারণ এটি ওবজে-সি # নির্বাচক পদ্ধতিগুলি ব্যবহার করার আশেপাশে আসে। ফলাফলটি আরও অনেক বেশি সুইফট-ওয়াই এবং আরও সঠিক, আইএমও। ধন্যবাদ!
patr1ck

2
মনে রাখবেন যদি এই ব্যবহার, বলো, একটি UIViewControllerএবং পড়ুন selfযে অবসান, আপনি ব্যবহার করতে হবে [weak self]অথবা আপনি একটি রেফারেন্স চক্র এবং মেমরি লিক আছে।
রব এন

40

এক্সকোড 8 এ সুইফট 3.0

সুইফট 3.0 অনেকগুলি "স্ট্রাইলি-টাইপড" এপিআইগুলিকে struct"র্যাপার টাইপস" দিয়ে প্রতিস্থাপন করেছে , যেমনটি নোটিফিকেশন সেন্টারের ক্ষেত্রে রয়েছে। বিজ্ঞপ্তিগুলি এখন struct Notfication.Nameবরং একটি দ্বারা চিহ্নিত করা হয় String। দেখুন সুইফট 3 গাইডে মাইগ্রেট

পূর্ববর্তী ব্যবহার:

// Define identifier
let notificationIdentifier: String = "NotificationIdentifier"

// Register to receive notification
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification(_:)), name: notificationIdentifier, object: nil)

// Post a notification
NSNotificationCenter.defaultCenter().postNotificationName(notificationIdentifier, object: nil)

নতুন সুইফট 3.0 ব্যবহার:

// Define identifier
let notificationName = Notification.Name("NotificationIdentifier")

// Register to receive notification
NotificationCenter.default.addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification), name: notificationName, object: nil)

// Post notification
NotificationCenter.default.post(name: notificationName, object: nil)

সমস্ত সিস্টেম নোটিফিকেশন ধরণের এখন স্ট্যাটিক ধ্রুবক হিসাবে সংজ্ঞায়িত করা হয় Notification.Name; অর্থাত .UIDeviceBatteryLevelDidChange, .UIApplicationDidFinishLaunching, .UITextFieldTextDidChange, ইত্যাদি

Notification.Nameসিস্টেমের বিজ্ঞপ্তিগুলির সাথে সামঞ্জস্য রাখতে আপনি আপনার নিজস্ব কাস্টম বিজ্ঞপ্তিগুলির সাথে প্রসারিত করতে পারেন :

// Definition:
extension Notification.Name {
    static let yourCustomNotificationName = Notification.Name("yourCustomNotificationName")
}

// Usage:
NotificationCenter.default.post(name: .yourCustomNotificationName, object: nil)

24
  1. একটি বিজ্ঞপ্তির নাম ঘোষণা করুন

    extension Notification.Name {
        static let purchaseDidFinish = Notification.Name("purchaseDidFinish")
    }
  2. আপনি দুটি উপায়ে পর্যবেক্ষক যুক্ত করতে পারেন:

    ব্যবহার Selector

    NotificationCenter.default.addObserver(self, selector: #selector(myFunction), name: .purchaseDidFinish, object: nil)
    
    @objc func myFunction(notification: Notification) {
        print(notification.object ?? "") //myObject
        print(notification.userInfo ?? "") //[AnyHashable("key"): "Value"]
    }

    বা ব্যবহার block

    NotificationCenter.default.addObserver(forName: .purchaseDidFinish, object: nil, queue: nil) { [weak self] (notification) in
        guard let strongSelf = self else {
            return
        }
    
        strongSelf.myFunction(notification: notification)
    }
    
    func myFunction(notification: Notification) {
        print(notification.object ?? "") //myObject
        print(notification.userInfo ?? "") //[AnyHashable("key"): "Value"]
    }
  3. আপনার বিজ্ঞপ্তি পোস্ট করুন

    NotificationCenter.default.post(name: .purchaseDidFinish, object: "myObject", userInfo: ["key": "Value"])

আইওএস 9 এবং ওএস এক্স 10.11 থেকে। এনএসএনটিফিকেশনকেন্দ্র পর্যবেক্ষকের পক্ষে ডিলেলকেটেড হওয়ার পরে নিজেকে নিবন্ধভুক্ত করা আর দরকার নেই। অধিক তথ্য

একটি জন্য blockভিত্তিক রূপায়ণ আপনি যদি একটি দুর্বল-শক্তিশালী নাচ করতে আপনি ব্যবহার করতে চান যদি প্রয়োজন selfব্লক ভিতরে। অধিক তথ্য

ব্লক ভিত্তিক পর্যবেক্ষকদের আরও তথ্য সরানো দরকার need

let center = NSNotificationCenter.defaultCenter()
center.removeObserver(self.localeChangeObserver)

5
"আইওএস 9 এবং ওএস এক্স 10.11 থেকে। এটি কেবল নির্বাচক ভিত্তিক পর্যবেক্ষকদের ক্ষেত্রেই সত্য। ব্লক ভিত্তিক পর্যবেক্ষকদের এখনও অপসারণ করা দরকার।
অভিনব

8

এনএসএনটিফিকেশন সেন্টার ব্যবহার করে ডেটা পাস করুন

আপনি সুইফট ৩.০ তে নোটিফিকেশনকেন্টার এবং সুইফট ২.০ এ এনএসএনটিফিকেশন সেন্টার ব্যবহার করে ডেটাও পাস করতে পারেন।

সুইফট ২.০ সংস্করণ

ব্যবহারকারীর সাহায্যে তথ্য পাস করুন ইনফো, যা প্রকারের একটি typeচ্ছিক অভিধান (এনএসওজেক্ট: যেকোনওজেক্ট]?

let imageDataDict:[String: UIImage] = ["image": image]

// Post a notification
 NSNotificationCenter.defaultCenter().postNotificationName(notificationName, object: nil, userInfo: imageDataDict)

// Register to receive notification in your class
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: notificationName, object: nil)

// handle notification
func showSpinningWheel(notification: NSNotification) {
  if let image = notification.userInfo?["image"] as? UIImage {
  // do something with your image   
  }
}

সুইফট 3.0 সংস্করণ

ব্যবহারকারীআইফোন এখন [যেকোন হ্যাশাবল: কোনও] নেয়? যুক্তি হিসাবে, যা আমরা সুইফটে একটি আক্ষরিক হিসাবে প্রদান করি

let imageDataDict:[String: UIImage] = ["image": image]

// post a notification
 NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageDataDict) 
// `default` is now a property, not a method call

// Register to receive notification in your class
NotificationCenter.default.addObserver(self, selector: #selector(self.showSpinningWheel(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil)

// handle notification
func showSpinningWheel(_ notification: NSNotification) {

  if let image = notification.userInfo?["image"] as? UIImage {
  // do something with your image   
  }
}

উত্স পাস NotificationCentre (SWIFT 3.0) এবং NSNotificationCenter ব্যবহার করে তথ্য (SWIFT 2.0)


শুনে আপনাকে আনন্দিত
সাহিল

6

ইন সুইফট 5

আসুন বলুন যে ভিউকন্ট্রোলারবি থেকে ভিউকন্ট্রোলারএতে ডেটা গ্রহণ করতে চান

ViewControllerA (রিসিভার)

import UIKit

class ViewControllerA: UIViewController  {

    override func viewDidLoad() {
        super.viewDidLoad()

        //MARK: - - - - - Code for Passing Data through Notification Observer - - - - -
        // add observer in controller(s) where you want to receive data
        NotificationCenter.default.addObserver(self, selector: #selector(self.methodOfReceivedNotification(notification:)), name: Notification.Name("NotificationIdentifier"), object: nil)
    }

    //MARK: - - - - - Method for receiving Data through Post Notificaiton - - - - -
    @objc func methodOfReceivedNotification(notification: Notification) {
        print("Value of notification : ", notification.object ?? "")
    }
}

ViewControllerB (প্রেরক)

import UIKit

class ViewControllerB: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //MARK: - - - - - Set data for Passing Data Post Notification - - - - -
        let objToBeSent = "Test Message from Notification"
        NotificationCenter.default.post(name: Notification.Name("NotificationIdentifier"), object: objToBeSent)
    }

}

2

আমি সফলভাবে একটি নির্বাচক ব্যবহার করতে নিম্নের যেকোনো কাজ করতে সক্ষম নই - ছাড়া @objc সাথে কাউকে টিকা:

NSNotificationCenter.defaultCenter().addObserver(self,
    selector:"batteryLevelChanged:" as Selector,
    name:"UIDeviceBatteryLevelDidChangeNotification",
    object:nil)    

অথবা

let notificationSelector: Selector = "batteryLevelChanged:"

NSNotificationCenter.defaultCenter().addObserver(self,
    selector: notificationSelector,
    name:"UIDeviceBatteryLevelDidChangeNotification",
    object:nil)    

আমার এক্সক্রুন সংস্করণটি সুইফট ১.২ দেখায় এবং এটি এক্সকোড .4.৪ এবং এক্সকোড bet বিটা ২ (যা আমি ভেবেছিলাম সুইফট ২.০ ব্যবহার করবে) তে কাজ করে:

$xcrun swift --version

Apple Swift version 1.2 (swiftlang-602.0.53.1 clang-602.0.53)

@objcআপনার পর্যবেক্ষক শ্রেণি যদি উত্তরাধিকার সূত্রে আসে তবে এগুলি দিয়ে আপনাকে মন্তব্য করার দরকার নেই NSObject
আন্তোনিও ফাভাটা

এবং আপনাকে স্পষ্টভাবে একটি নিক্ষেপ প্রয়োজন করা উচিত নয় Stringকরার Selectorপারেন। :)
আন্তোনিও ফাভাটা

@ এলফভাটা: আমার পর্যবেক্ষক শ্রেণি এনএসবজেক্ট থেকে উত্তরাধিকার সূত্রে আসে না। এটি যেকোনওজেক্ট, সুইফ্ট-স্টাইল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। সিলেক্টারের কাছে স্পষ্টভাবে স্ট্রিংটি কাস্ট করা আমাকে অন্য উদ্দেশ্য-সি-সম্পর্কিত ওয়ার্কআউন্ডের কোনও কাজ এড়াতে দেয়।
leanne

আমি নিশ্চিত না যে আমি বুঝতে পারি যে এটি কীভাবে কাজ করে। আমি @objcআমার অ- NSObjectপর্যবেক্ষক শ্রেণিতে পদ্ধতি থেকে টীকা মুছে ফেলেছি , নির্বাচকের নামটিতে as Selectorকাস্টিং যুক্ত করেছি Stringএবং যখন বিজ্ঞপ্তিটি অ্যাপটি ক্র্যাশ করে তখন। আমার সুইফ্ট সংস্করণটি ঠিক আপনার মতো।
আন্তোনিও ফাভাটা

3
@ আলফাভাটা, তোমাকে কী বলব জানি না। আমি এখন এক্সকোড বিটা 4 এ আছি এবং এটি এখনও কাজ করছে। আমার প্রকল্পটি সম্পূর্ণ সুইফ্ট; কোনও উদ্দেশ্য-সি উপাদান নেই। সম্ভবত এটি একটি পার্থক্য করে। প্রকল্পের সেটিংসে কিছু আলাদা থাকতে পারে। সম্ভাবনার সংখ্যা আছে! আমি বলব: যতক্ষণ @objcটীকা আপনার পক্ষে কাজ করে এবং যতক্ষণ না এইভাবে কাজ করে না, ততক্ষণ টীকাতে থাকুন!
লিনে

2

দ্রুতগতি 2.2 ইন - উপর XCode 7.3, আমরা ব্যবহার #selectorজন্যNSNotificationCenter

 NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(rotate), name: UIDeviceOrientationDidChangeNotification, object: nil)

2

আমাদেরও বিজ্ঞপ্তি অপসারণ করা উচিত।

যাত্রা।

deinit 
{
  NotificationCenter.default.removeObserver(self, name:NSNotification.Name(rawValue: "notify"), object: nil)

}

2
আমি বিশ্বাস করি আইওএস ৯ এর পরে আপনার এটির দরকার নেই এটি স্বয়ংক্রিয়ভাবে সম্পন্ন হয়েছে।
ভিক্টর কুসেরা

1

সুইফ্ট 3 এ, এক্সকোড 8.2: - ব্যাটারির স্থিতির স্তর পরীক্ষা করা

//Add observer
NotificationCenter.default.addObserver(self, selector: #selector(batteryStateDidChange), name: NSNotification.Name.UIDeviceBatteryStateDidChange, object: nil)


 //Fired when battery level changes

 func batteryStateDidChange(notification: NSNotification){
        //perform manipulation here
    }

1

এনএসএনটিফিকেশন সেন্টার আইওএস 11 এর জন্য সুইফট ৪.০ এ পর্যবেক্ষক সিনট্যাক্স যুক্ত করুন

  NotificationCenter.default.addObserver(self, selector: #selector(keyboardShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

এটি কি-বোর্ড উইলশো বিজ্ঞপ্তি নাম ধরণের জন্য। উপলব্ধ বিকল্প থেকে অন্য ধরণের নির্বাচন করা যেতে পারে

নির্বাচকটি @objc func টাইপ করে যা কীবোর্ডটি কীভাবে প্রদর্শিত হবে তা পরিচালনা করে (এটি আপনার ব্যবহারকারীর কাজ)


এই উত্তরটি যে কেউ পড়ছেন তার জন্য কেবল স্পষ্ট করে বলতে: "নির্বাচকটি @objc func টাইপের হয় ..." এর অর্থ এর সাথে যুক্ত ফাংশনটি #selectorঅবশ্যই বয়ান করা উচিত @objc। উদাহরণস্বরূপ: @objc func keyboardShow() { ... }এটি আমাকে সুইফট 4 এ এক মিনিটের জন্য ছুড়ে ফেলেছে!
leanne

0

সুইফ্ট 5 এবং এক্সকোড 10.2:

NotificationCenter.default.addObserver(
            self,
            selector: #selector(batteryLevelDidChangeNotification),
            name: UIDevice.batteryLevelDidChangeNotification,
            object: nil)

0

সুইফট 5 বিজ্ঞপ্তি পর্যবেক্ষক

override func viewDidLoad() {
    super.viewDidLoad() 
    NotificationCenter.default.addObserver(self, selector: #selector(batteryLevelChanged), name: UIDevice.batteryLevelDidChangeNotification, object: nil)
}

@objc func batteryLevelChanged(notification : NSNotification){
    //do here code
}

override func viewWillDisappear(_ animated: Bool) {
    NotificationCenter.default.removeObserver(self, name: UIDevice.batteryLevelDidChangeNotification, object: nil)

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.