在构建另一个数组的函数中使用字符串数组作为函数参数

时间:2019-10-22 03:35:01

标签: swift ffmpeg

我从一个空数组开始:

var ffmpegFilters = [String]()

我有一个按钮,单击该按钮后应启动ffmpeg进程:

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

该过程的功能如下:

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]”的值转换为预期的参数类型   “字符串”

我不确定如何解决该问题。正确设置这些ffmpeg参数的格式非常重要,因为现在由于ffmpeg不喜欢Swift在此过程中传递给它的参数,我的项目被卡住了,所以我试图将与参数有关的所有内容都当作项目符号尽我所能。

1 个答案:

答案 0 :(得分:0)

以下方法声明中的参数filters的类型为String

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

但是在IBAction方法startConversionClicked中,您传递的是arrayString)的[String]而不是错误的String

只是使编译器静音,请在startConversionClicked内尝试此操作,

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

此处ffmpegFilters.joined()将返回String,与方法参数filters期望的类型相同。