swift - 将 UI 与逻辑 Swift 连接时出现关闭错误

标签 swift closures

我需要将 UI 与模块连接起来。

错误:无法将类型“()”的值转换为闭包结果类型“Bool”

Controller 代码:

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

如果您能提供更好的方法,我们将不胜感激。

最佳答案

playPause 方法在 completion block 中没有任何内容,但是

 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 删除它,您的代码将正常运行

关于swift - 将 UI 与逻辑 Swift 连接时出现关闭错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52854136/

相关文章:

ios - 上传图像/视频到 FTP Swift 3.0

ios - Swift:在不同的函数中调用闭包完成方法

ios - 限制几个文本字段的长度

swift - 根据 IF 语句更改 ViewController

swift - 如何在 TextField 中将占位符文本居中

JavaScript 词法作用域和变量的生命周期

javascript - HTML5/Cordova 中的简单 readFile() 函数

ios - 使用 ForEach 在 SwiftUI 中按下按钮时制作独特的工作表?

javascript - 我什么时候应该使用 "that"的 Douglas Crockfords 实现?

groovy - 如何将 Groovy 闭包变量注入(inject) Spock 模拟谓词参数?