Я пытаюсь сканировать устройства Bluetooth на 5 секунд. Однако я не могу реализовать фазу времени. Мой код в настоящее время выглядит так:Как запустить действие за определенное время?
@IBAction func scanButton(_ sender: Any)
{
startScanning()
let disableScanButton = sender as? UIButton
disableScanButton?.isEnabled = true
}
func startScanning()
{
timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(ViewController.stopScanning), userInfo: nil, repeats: true)
print("Start Scan")
manager?.scanForPeripherals(withServices: nil, options: nil)
print("There are \(peripheralArray.count) no. of peripherals counted for")
stopScanning()
}
func stopScanning()
{
timer?.invalidate()
print("timer stopped")
manager?.stopScan()
print("Scan Stopped")
}
Таким образом, я нажимаю кнопку, а затем сканирует ее. Тем не менее, это просто, кажется, быстро проходит все действия. Я думал, что таймер будет держать его, но это не так. Возможно ли каким-либо образом зациклить его на функцию startScanning?
Я посмотрел на других людей, но я не могу найти ничего. И те, которые кажутся очень сложными.
Я ищу решение, проще, тем лучше. Однако, если просто невозможно, то я открыт для любых вариантов, которые есть у людей.
Вы вызываете 'scanForPeripherals (withServices: options:)' и сразу после вызова 'stopScanning()'. Удалите эту строку, сканирование не сразу! Таким образом, у вас часто нет элемента в «peripheralArray». – Larme
Теперь я удалил функцию stopScanning из области функции startScanning, однако она все равно занимает около 1 с ... У меня что-то отсутствует? scanforperpherals находится чуть ниже таймера –
Это может быть более интересно, чем использование NSTimer только для этого, чтобы сделать 'self.performSelector (afterDelay:)' (или что-то в этом роде). – Larme