Не могу найти способ реализовать функцию ожидания в моем коде (Swift) - PullRequest
0 голосов
/ 09 февраля 2019

Я не могу найти способ реализовать функцию ожидания, я использую siwftforwindows, и ни один из примеров в Интернете не смог решить ее до сих пор.это быстро 4.2

класс в основном массив, который при вызове функции каждый индекс в массиве получает постоянное значение вычитается.функция галочки - это то, что вызывается.Я новичок в Swift, так что не думайте, если мой код выглядит как ****.спасибо за любой ввод, который у вас есть.

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")
}
}
     }

где он говорит // функция ожидания здесь pls // я хотел бы заставить программу ждать 1 секунду.

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Вы можете просто использовать UNIX-Functin func sleep(_: UInt32) -> UInt32.В вашем случае используйте sleep(1), чтобы подождать одну секунду.

0 голосов
/ 09 февраля 2019

Вы можете использовать Grand Central Dispatch или выполнить.

Решение GCD:

let delayInSeconds = 1
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds) {
print("tick", terminator:"?")
}

Если вы хотите узнать больше о Grand Central Dispatch (GCD), я предлагаю вам прочитать это: Grand Central Dispatch - Википедия

Grand Central Dispatch Учебное пособие - Рэй Вендерлих

Выполнить решение:

Создайте функцию, подобную этой:

@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)
0 голосов
/ 09 февраля 2019

Есть много способов сделать это, но наиболее распространенный способ - создать функцию завершения .Например:

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")
}

или вы можете просто создать еще одну функцию и отправить ее в качестве параметра.

Вы также можете использовать DispatchQueue:

DispatchQueue.main.asyncAfter(deadline: .now()+1) {
    // put your func here...
}
...