ошибка закрытия при подключении интерфейса с логикой Swift - PullRequest
0 голосов
/ 17 октября 2018

Мне нужно подключить интерфейс с модулем.

Ошибка: невозможно преобразовать значение типа '()' в тип результата закрытия 'Bool'

Код контроллера:

private func connectLogicView() {
    screenView.handlePlayPauseButton(sender: screenView.playPauseButton) { () -> Bool in

        obj.playPause(queue: .global()) { //Error here
            if self.obj.getPlayer().timeControlStatus != .paused {
                return true
            } else if self.obj.getPlayer().timeControlStatus == .paused {
                return false
            }
        }
    }
}

Код модуля:

public func playPause(queue: DispatchQueue, completion: @escaping ()->Void){
    if player.timeControlStatus == .playing {
        player.pause()
    } else {
        player.play()
    }
    queue.async {
        completion()
    }
}

Код интерфейса:

func handlePlayPauseButton(sender: UIButton, completion: () -> Bool) {
    if completion() == true {
        sender.setTitle("pause", for: .normal)
    } else {
        sender.setTitle("play", for: .normal)
    }
}

Если вы можете показатьлучший способ, это будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Как сказал @Prashant Tukadiya, код кажется немного хитрым / сложным.Легким способом было бы что-то похожее на ниже

func playPause(queue: DispatchQueue, completion: @escaping (Bool) -> Void){
   let someOtherCondition: Bool = false
   var returnAnswer: Bool = false
   if someOtherCondition {
       print("player paused")
       returnAnswer = true
   } else {
       print("player play")
   }
   queue.async {
       completion(returnAnswer)
   }
}

func connectLogicView() {
   let aSampleButton: UIButton = UIButton.init()
   playPause(queue: .global()) { (isPlaying) in
       if isPlaying {
           aSampleButton.setTitle("pause", for: .normal)
       } else {
           aSampleButton.setTitle("play", for: .normal)
       }
   }
}
0 голосов
/ 17 октября 2018

playPause метод не имеет ничего в блоке completion, но

 obj.playPause(queue: .global()) { 
        if self.obj.getPlayer().timeControlStatus != .paused {
            return true // NO NEED FOR THIS LINE
        } else if self.obj.getPlayer().timeControlStatus == .paused {
            return false  // NO NEED FOR THIS LINE
        }
   }

Вы возвращаете true или false, удалите его, и ваш код будет работать нормально

...