gpt4 book ai didi

swift - removeObserver、addObserver、NSPredicate、PFQuery 它们是什么?

转载 作者:行者123 更新时间:2023-11-30 14:16:09 26 4
gpt4 key购买 nike

好的,我有一些关于我刚刚下载的 swift 应用程序中调用的函数的问题

1) 什么是addObserver和removeObserver。什么是观察者。

   NSNotificationCenter.defaultCenter().addObserver(self, selector: "displayPushMessage:", name: "displayMessage", object: nil)**

//}

  NSNotificationCenter.defaultCenter().removeObserver(self, name: "displayMessage", object: nil)

2)什么是 NSPredicate???

           let pred = NSPredicate(format: "user1 = %@ OR user2 = %@", PFUser.currentUser(), PFUser.currentUser())



3) //what is PFQuery???





let roomQuery = PFQuery(className: "Room", predicate: pred)

roomQuery.orderByDescending("lastUpdate")

roomQuery.includeKey("user1")

roomQuery.includeKey("user2")

最佳答案

添加和删除观察者实际上是您在 swift 中“默认”获得的设计模式。他们监听特定事件,然后通知监听器(观察者)有关该更改的信息。例如,看一下您的示例:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "displayPushMessage:", name: "displayMessage", object: nil)

这将在通知中心创建观察者。实际观察者是设置此特定观察者的对象(例如 View Controller )。该观察者必须使用 NSNotification 参数实现 displayPushMessage。当这个观察者被通知发生了一些事情之后,这个方法将会被调用。 NSNotification 包含您可以转换为您自己的对象的 object ,以及您将与特定数据一起发送的对象。您还可以设置观察者的名称。

这是一个使用某个对象发送带有通知的数据的示例。让 ObserverExample 成为您的自定义类,并且您希望该对象发送到通知。然后你将有一个名为 sendNotification 或 post 或其他的方法。在该方法中使用:

NSNotificationCenter.defaultCenter().postNotificationName("Hello", object: self)

你接受这个的方法看起来像

func displayPushMessage:(notification:NSNotification){
var myObject = notification.object as! ObserverExample!
}

然后,您可以从 myObject(即 ObserverExample 类)中提取所需的数据。

删除观察者方法用于在您完成一些逻辑后,或者您不想听它,或者无论您删除它的原因是什么后,从通知中心删除观察者。

NSPredicate 用于从数据集中过滤、排序或获取特定数据。可以与数组、字典、CoreData 等一起使用。您可以找到很多关于此示例的示例,下面是一个可以为您提供具有特定 id 的对象的示例:

var predicate = NSPredicate(format: "id = %@", someId)

以及更高版本,您可以按如下方式使用它(例如使用 Realm):

let results = realm.objects(MyObject).filter(predicate)

关于PFQuery,这是Parse类,Parse实际上是数据库即在线数据库的服务提供者。例如,替代方案是 Firebase。您可以在这里找到更多信息:https://parse.com/

关于swift - removeObserver、addObserver、NSPredicate、PFQuery 它们是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31148677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com