iOS Swift "Дополнительный аргумент в выражении типа" вызов "при создании и вызове функции

97
10

У меня возникли проблемы с пониманием того, почему я получаю сообщение об ошибке при создании и вызове функции ниже. Я использовал два аргумента типа String. Почему это порождает ошибку?

import UIKit
import AVFoundation

class PlaySoundsViewController: UIViewController {

func prepareAudio(sound: String, type: String) -> AVAudioPlayer {
var sound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(sound, ofType: type)!)

var error:NSError?

return AVAudioPlayer(contentsOfURL: sound, error: &error)
}

var audioPlayer = prepareAudio(sound: "movie_quote", type: "mp3")

Я получаю дополнительный аргумент в ошибке "type" при попытке установить переменную audioPlayer в результат функции prepareAudio.

Остальная часть контроллера находится ниже. В конечном счете, я пытаюсь открыть mp3 файл "movie_quote" и играть его на более медленной скорости.

    override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func slowSpeed(sender: UIButton) {
audioPlayer.enableRate = true
audioPlayer.rate = 0.5
audioPlayer.prepareToPlay()
audioPlayer.play()
}

спросил(а) 2021-01-19T19:09:46+03:00 2 месяца, 3 недели назад
1
Решение
61

Для того, чтобы код работал так, как он есть, вам нужно prepareAudio как метод класса, а не метод экземпляра. Таким образом, полученный код должен выглядеть так:

class PlaySoundsViewController: UIViewController {

class func prepareAudio(sound: String, type: String) -> AVAudioPlayer {
var sound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(sound, ofType: type)!)

var error:NSError?

return AVAudioPlayer(contentsOfURL: sound, error: &error)
}

var audioPlayer: AVAudioPlayer = PlaySoundsViewController.prepareAudio("movie_quote", type: "mp3")
}

Также обратите внимание, что я сменил вызов функции на prepareAudio("movie_quote", type: "mp3") потому что первый параметр по умолчанию не имеет внешнего имени. Чтобы изменить это, вы можете написать class func prepareAudio(#sound: String, type: String) при определении метода.

ответил(а) 2021-01-19T19:09:46+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема