gpt4 book ai didi

swift - 如何在访问前一个 Controller 期间处理 nil(同时展开可选值)

转载 作者:行者123 更新时间:2023-11-30 12:44:53 24 4
gpt4 key购买 nike

在我的 Controller 1 中,我有一个表。根据单元格的选择,索引路径将连接到 Controller 2,该 Controller 也是一个表。通过该索引路径,我有一个 CloudKit 函数,可以从此索引路径下载适当的数组,如下所示...

var newindex:IndexPath!

var restaurantArray: Array<CKRecord> = []

override func viewDidLoad() {
super.viewDidLoad()




func downloadRestaurants ()
{

let publicDB = CKContainer.default().publicCloudDatabase

let predicate = NSPredicate(value: true)

var query:CKQuery

switch newindex.row
{
case 0 :
query = CKQuery(recordType: "american", predicate: predicate)
self.typelabel.text = "American & European"
case 1 :
query = CKQuery(recordType: "asian", predicate: predicate)
self.typelabel.text = "Asian, Oriental, Indian & Mediterranean"
case 2 :
query = CKQuery(recordType: "pubs", predicate: predicate)
self.typelabel.text = "Burgers & Brew"

default :
query = CKQuery(recordType: "steakhouses", predicate: predicate)
self.typelabel.text = "Steakhouses"
}
publicDB.perform(query, inZoneWith: nil)
{
(results, error) -> Void in

if (error != nil)
{
print("Error" + (error?.localizedDescription)!)
}
else
{
for result in results!
{
self.restaurantArray.append(result)
}
OperationQueue.main.addOperation( { () -> Void in
self.tableView.reloadData()
})
}
}
}
downloadRestaurants()
}

但是,当我选择这些数组实例之一时,我会被带到 Controller 3 中的一个特定实例。这不是问题,但是当我“返回”选择另一实例时,我的程序崩溃了。这是可以理解的。目前,我的逻辑设置为从 Controller 1 到 2 到 3,但根据我的索引路径/表函数,不是从 3 到 2。那么,我该如何解决这个小难题呢?

我正在犹豫如何向 Controller 2 发出警报(来自表 3)。我觉得好像我可以为 Controller 2 创建另一个索引路径变量,或者我可以在 Controller 2 中创建一个 in 语句,但我对如何走该路径感到模糊。有建议吗?

最佳答案

为了将任何事情从类 3 通知类 2,您应该使用协议(protocol)/委托(delegate)方法。可以这样完成

 protocol MyClass3Delegate {
func clicked()
}

class MyClass3: UIColletionViewCell {
var delegate : MyClass3Delegate?

//call delegate?.clicked() when you dismiss the ViewController

}

然后在prepareForSegue()中你应该调用它

 if segue.identifier == "your identifier" {
let destination = segue.destinationViewController as? MyClass3
destination.delegate = self
}

在你的 Class2 中你应该这样做来扩展协议(protocol):

 extension MyClass2: MyClass3 {
func clicked() {
//do your logic here
}
}

关于swift - 如何在访问前一个 Controller 期间处理 nil(同时展开可选值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41769949/

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