在我的Swift代码中找不到实现等待函数的方法

在我的Swift代码中找不到实现等待函数的方法,swift,wait,Swift,Wait,我找不到实现等待功能的方法,我使用的是swiftforwindows,到目前为止还没有在线示例能够解决这个问题。是斯威夫特4.2 该类基本上是一个数组,当调用一个函数时,数组上的每个索引都会扣除一个常量值。正在调用的是tick函数。我是斯威夫特的新手 class resProj { var list = [1,1,1,1] var projReq = [100,200,300,50] var completed = false func tick(){ for count in 0.

我找不到实现等待功能的方法,我使用的是swiftforwindows,到目前为止还没有在线示例能够解决这个问题。是斯威夫特4.2

该类基本上是一个数组,当调用一个函数时,数组上的每个索引都会扣除一个常量值。正在调用的是tick函数。我是斯威夫特的新手

class resProj {

var list = [1,1,1,1]
var projReq = [100,200,300,50]
var completed = false

func tick(){
    for count in 0..<projReq.count{
        if projReq[count] <= list[count]{
            projReq[count] = 0
        }
        else if projReq[count] > list[count]{
            projReq[count] -= list[count]
        }
    }
    print(projReq)
}


init(
    mathsP      mathsIn:    Int,
    scienceP    sciecnceIn: Int,
    enginerP    enginerIn:  Int,
    businessP   businessIn: Int) {

    self.list [0] = mathsIn
    self.list [1] = sciecnceIn
    self.list [2] = enginerIn
    self.list [3] = businessIn

    }
 }

var spaceElev = resProj(
mathsP:     10,
scienceP:   20,
enginerP:   30,
businessP:  5)

var x = false

while x == false{
//wait function here pls//
print("tick", terminator:"?")
let y = readLine()
if y == "y"{
    spaceElev.tick()
}
else{
    print("gotta put y")
    }
var templist = spaceElev.projReq
var templistcount = 0
templistcount = templist.count
for loop in 0..<templistcount{
    if templist[loop] == 0{
        templistcount -= 1
    }
}
if templistcount == 0 {
    x = true
    print("project completed")
}
}
     }

此处显示//等待函数,请//我想让程序等待1秒。

有很多方法可以做到这一点,但最常见的方法是创建一个完成函数。例如:

func doSth(_ someParameter: String, _ completion: ()->()) {
    print(someParameter)
    //  After your code is finish call completion
    completion()
}
当你打电话时,有两种方式:

doSth("Done") {
    print("You can be sure that this block will work after your func finish")
}
或者,只需创建另一个func并将其作为参数发送即可

您还可以使用DispatchQueue:


您可以简单地使用UNIX函数func sleep\uUit32->UInt32。
在您的情况下,使用sleep1等待一秒钟。

您可以使用Grand Central Dispatch或perform

GCD解决方案:

let delayInSeconds = 1
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) {
print("tick", terminator:"?")
}
如果您想了解有关Grand Central Dispatch GCD的更多信息,我建议您通读以下内容:

执行解决方案:

let delayInSeconds = 1
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) {
print("tick", terminator:"?")
}
创建如下函数:

@objc func delayedFunc() {
//write the code here that you want to execute with a one second delay
}
然后在希望延迟函数执行的位置调用此函数:

let delayInSeconds = 1
perform(#selector(delayedFunc), with: nil, afterDelay: delayInSeconds)
您可以使用RunLoop类:

func waitfor interval:TimeInterval{ RunLoop.current.rununtil:日期+间隔 }
试试睡觉。这就是你想要的吗?基本上,你不应该试图让你的应用停止一段时间。您真正需要的是安排代码在1秒后执行。例如,使用计时器。可能重复:起诉这些游戏me:错误:使用未解析的标识符'DispatchQueue'DispatchQueue.main.asyncAfterdeadline:.now+DelayUnseconds{哦,是的,我现在只看到你在Windows上使用Swift。GCD是苹果的技术,所以你在Windows上找不到它。你尝试过执行方法吗?我想那应该仍然有效。我不知道那是什么,我有一天的经验,你有一个链接到一个页面,我可以了解它吗?我更新了我的答案!尝试执行解决方案,然后让我知道它是否有效。它告诉我:C:\Users\thoma\Desktop\1984\Swift\game\Swift\game\test。Swift:3:7:错误:objc只能用于类的成员、objc协议和类objc func delayedFunc的具体扩展{~~~~~^C:\Users\thoma\Desktop\1984\Swift\GAME\Swift\GAME\test.Swift:8:1:错误:使用未解析标识符'performselectordelayedFunc,with:nil,afterDelay:delayinsonds^~~~~SwiftMinGWCrt.perror:1:13:注意:您的意思是'perror'?public func perror_uerrmsg:UnsafePointer!^编译失败。我得到了前2个代码片段正常工作,但没有增加延迟。这是windows的swift,而不是Xcode swift.idk,如果这有区别的话