gpt4 book ai didi

ios - 如何在函数完成之前停止 viewWillAppear 完成

转载 作者:可可西里 更新时间:2023-11-01 00:59:07 25 4
gpt4 key购买 nike

我是 IOS 应用程序开发的新手。

我试图阻止 viewWillAppear 在我的函数完成工作之前完成。我该怎么做?

这里是 viewWillAppear:

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)

checkFacts()

if reset != 0 {
print("removing all bird facts")
birdFacts.removeAll()
}
}

func checkFacts() {
let date = getDate()
var x: Bool = true
var ind: Int = 0
print("count is ", birdFacts.count)
while ind < birdFacts.count {
print("accessing each bird fact in checkFacts")
let imageAsset: CKAsset = birdFacts[ind].valueForKey("birdPicture") as! CKAsset
let image = UIImage(contentsOfFile: imageAsset.fileURL.path!)
print(image)
if image == nil {
if (birdFacts[ind].valueForKey("sortingDate") != nil){
print("replacing fact")
print("accessing the sortingDate of current fact in checkFacts")
let sdate = birdFacts[ind].valueForKey("sortingDate") as! NSNumber
replaceFact(sdate, index: ind)
}
/*else {
birdFacts.removeAll()
print("removing all bird facts")
}*/

}
ind = ind + 1
print(ind)
}
self.saveFacts()
let y = checkRepeatingFacts()
if y {
print("removing all facts")
birdFacts.removeAll()
//allprevFacts(date, olddate: 0)
}
}

checkFacts 引用了另外 2 个函数,但我不确定它们在这里是否相关(但如果它们是相关的并且我弄错了,我会添加它们)

最佳答案

与其尝试改变或停止应用程序的实际生命周期,不如尝试使用闭包

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)

checkFacts(){ Void in
if self.reset != 0 {
print("removing all bird facts")
birdFacts.removeAll()
}
}
}

func checkFacts(block: (()->Void)? = nil) {
let date = getDate()
var x: Bool = true
var ind: Int = 0
print("count is ", birdFacts.count)
while ind < birdFacts.count {
print("accessing each bird fact in checkFacts")
let imageAsset: CKAsset = birdFacts[ind].valueForKey("birdPicture") as! CKAsset
let image = UIImage(contentsOfFile: imageAsset.fileURL.path!)
print(image)
if image == nil {
if (birdFacts[ind].valueForKey("sortingDate") != nil){
print("replacing fact")
print("accessing the sortingDate of current fact in checkFacts")
let sdate = birdFacts[ind].valueForKey("sortingDate") as! NSNumber
replaceFact(sdate, index: ind)
}
/*else {
birdFacts.removeAll()
print("removing all bird facts")
}*/

}
ind = ind + 1
print(ind)
}
self.saveFacts()
let y = checkRepeatingFacts()
if y {
print("removing all facts")
birdFacts.removeAll()
//allprevFacts(date, olddate: 0)
}

// CALL CODE IN CLOSURE LAST //
if let block = block {
block()
}
}

根据 Apple Documentation :

Closures are self-contained blocks of functionality that can be passed around and used in your code.

Closures can capture and store references to any constants and variables from the context in which they are defined.

因此,通过将 checkFacts() 定义为:func checkFacts(block: (()->Void)? = nil){...} 我们可以选择传递在 checkFacts() 函数中执行的代码块中。

block 的语法:(()->Void)? = nil 意味着我们可以接收一个将返回 void 的代码块,但如果没有传入任何内容,block 将只是 nil。这允许我们在使用或不使用闭包的情况下调用函数。

通过使用:

if let block = block {
block()
}

我们可以安全地调用block()。如果 block 返回为 nil,我们将忽略它并假装什么都没发生。如果 block not nil,我们可以执行其中包含的代码,然后继续前进。

我们可以将闭包代码传递给 checkFacts() 的一种方法是使用尾随闭包。尾随闭包如下所示:

checkFacts(){ Void in
if self.reset != 0 {
print("removing all bird facts")
birdFacts.removeAll()
}
}

编辑:添加语法解释。

关于ios - 如何在函数完成之前停止 viewWillAppear 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311344/

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