Использование массива строк в качестве параметра функции в функции, которая создает другой массив - PullRequest
0 голосов
/ 22 октября 2019

Я начинаю с пустого массива:

var ffmpegFilters = [String]()

У меня есть кнопка, которая должна запускать процесс ffmpeg при нажатии на нее:

@IBAction func startConversionClicked(_ sender: Any) {
    //buildFfmpegString()
    ffmpegConvert(inputPath: inputFilePath, filters: ffmpegFilters, outputPath: "outputFilePath")
}

Функция с процессом выглядит такthis:

func ffmpegConvert(inputPath: String, filters: String, outputPath: String) {
    guard let launchPath = Bundle.main.path(forResource: "ffmpeg", ofType: "") else { return }
    do {
        let convertTask: Process = Process()
        convertTask.launchPath = launchPath
        convertTask.arguments = [
            "-i", inputPath,
            filters,
            outputPath
        ]
        convertTask.standardInput = FileHandle.nullDevice
        convertTask.launch()
        convertTask.waitUntilExit()
    }
}

массив переменных ffmpegFilters определен в другой функции:

func conversionSelection() {
    if inputFileUrl != nil {
        let conversionChoice = conversionOptionsPopup.indexOfSelectedItem
        switch conversionChoice {
            case 1 :
                outputExtension = ".mp3"
                ffmpegFilters = ["-c:a libmp3lame", "-ac 1", "-ar 22050", "-q:a 9"]
            case 2 :
                outputExtension = ".mp3"
                ffmpegFilters = ["-c:a libmp3lame", "-ac 2", "-ar 44100", "-q:a 5"]
            case 3 :
                outputExtension = ".mp3"
                ffmpegFilters = ["-c:a libmp3lame", "-ac 1", "-ar 22050", "-b:a 32k"]
            case 4:
                outputExtension = ".flac"
                ffmpegFilters = ["-c:a flac"]
            default :
                outputExtension = ".m4b"
                ffmpegFilters = ["-c copy"]
        }
    }
}

Таким образом, мой массив строк используется как элемент в другом массиве строк. Когда я делаю это, моя @IBAction вверху выдает мне ошибку:

Невозможно преобразовать значение типа '[String]' в ожидаемый тип аргумента 'String'

И я не уверен, как это исправить. Очень важно правильно настроить форматирование этих аргументов ffmpeg, потому что сейчас мой проект застрял из-за того, что ffmpeg не нравятся аргументы, которые Swift передает ему в этом процессе, поэтому я пытаюсь сделать все, что связано с аргументами, в качестве маркеракак я могу.

1 Ответ

0 голосов
/ 22 октября 2019

Аргумент filters имеет тип String в приведенном ниже описании метода,

func ffmpegConvert(inputPath: String, filters: String, outputPath: String)

, но в методе IBAction startConversionClicked вы передаете array из String ([String]) вместо String, что неверно.

Просто чтобы заставить компилятор замолчать, попробуйте это внутри startConversionClicked,

ffmpegConvert(inputPath: inputFilePath, filters: ffmpegFilters.joined(), outputPath: "outputFilePath")

Здесь ffmpegFilters.joined() вернет Stringтого же типа, который ожидает аргумент метода filters.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...