Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何编写一个始终显示文本、具有播放、暂停、下一步、上一步功能的程序?_Ios_Swift - Fatal编程技术网

Ios 如何编写一个始终显示文本、具有播放、暂停、下一步、上一步功能的程序?

Ios 如何编写一个始终显示文本、具有播放、暂停、下一步、上一步功能的程序?,ios,swift,Ios,Swift,我制作了一个文本播放器,在一段时间后用一种语言显示短语,这是一个英语翻译,使用mp3大声播放短语。有播放、暂停、下一步、上一步按钮 我写了代码,里面有一些bug: class Sentence: Codable { var id: Int var rus: String var eng: String var link: String init(id: Int, rus: String, eng: String, link: String) {

我制作了一个文本播放器,在一段时间后用一种语言显示短语,这是一个英语翻译,使用mp3大声播放短语。有播放、暂停、下一步、上一步按钮

我写了代码,里面有一些bug:

class Sentence: Codable {
    var id: Int
    var rus: String
    var eng: String
    var link: String

    init(id: Int, rus: String, eng: String, link: String) {
        self.id = id
        self.rus = rus
        self.eng = eng
        self.link = link
    }
}

class WordsViewController: UIViewController {

    var sentences: [Sentence] = [Sentence]()
    var isPlayTouch = false
    var isIncrement = false
    var speed: Double = 1.5
    var position: Int = 0

    @objc func playAction() {
        self.isPlayTouch = true
        if sentences.count > 0 {

            let duration = self.getDurationAudio(link: self.sentences[self.position].link)

            DispatchQueue.global().async {
                if self.isPlayTouch {
                    Thread.sleep(forTimeInterval: duration * self.speed)
                    if self.isPlayTouch {
                        DispatchQueue.main.async {
                            self.playSound()
                            self.wordsView.sentence.text = self.sentences[self.position].eng
                            DispatchQueue.global().async {
                                if self.isPlayTouch {
                                    Thread.sleep(forTimeInterval: duration)
                                    DispatchQueue.main.async {
                                        if self.isPlayTouch {
                                            if self.position == self.sentences.count - 1 {
                                                self.pauseAction()
                                                if !self.isIncrement {
                                                    self.isIncrement = true
                                                }
                                            } else {
                                                if self.isPlayTouch {
                                                    Thread.sleep(forTimeInterval: 0.5)
                                                    if self.isPlayTouch {
                                                        self.position = self.position + 1
                                                        self.setText()
                                                        if self.isPlayTouch {
                                                            self.playAction()
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    } 
}
  • 按暂停按钮延迟一段时间后,立即按播放列表,会同时播放两个短语,这是由于检查了isPlayTouch变量

告诉我如何编写此功能?

15
}
彼此之后都是可怕的。这样的代码很难阅读和理解(也很难修复)。我会在不使用DispatchQueue的情况下重写代码,直到它正常工作。这是代码的一部分。只是复制是行不通的15
}
彼此之后是可怕的。这样的代码很难阅读和理解(也很难修复)。我会在不使用DispatchQueue的情况下重写代码,直到它正常工作。这是代码的一部分。只是抄袭是行不通的