С Swift 3 с использованием GCD изменился на DispatchGroup()
, и я пытаюсь научиться использовать его в своем коде.Использование DispatchGroup() в Swift 3 для выполнения задачи?
В настоящее время у меня есть функция в другом классе, которая пытается загрузить файл и вывести его скорость. Мне нравится, когда эта функция заканчивается первой, потому что я назначаю ее скорость var
, которую я буду использовать в первом классе для выполнения других задач, зависящих от этого var
.
Это звучит примерно так:
Второй класс:
func checkSpeed()
{
// call other functions and perform task to download file from link
// print out speed of download
nMbps = speedOfDownload
}
Первый класс:
let myGroup = DispatchGroup()
let check: SecondClass = SecondClass()
myGroup.enter()
check.checkSpeed()
myGroup.leave()
myGroup.notify(queue: DispatchQueue.main, execute: {
print("Finished all requests.")
print("speed = \(check.nMbps)")
})
Проблема заключается в том Finish all requests
получает выход первых, таким образом, возвращая nil
для speed
, то впоследствии checkSpeed
обеспечивает правильную скорость загрузки.
Я считаю, что я делаю это неправильно, но я не уверен?
Как я могу гарантировать, что speed
получает правильное значение после завершения checkSpeed
в моем первом классе?
Деталь checkSpeed
точно так же, как и connectedToNetwork
из GitHub: connectedness.swift
Это зависит от того, как ваш 'checkSpeed ()' является вызовом задачи загрузки. Вам нужно показать некоторые подробности метода. – OOPer
Если вы говорите о ** одном ** файле, вам нужен асинхронный обработчик завершения, а не группа. – vadian