Arrays 如何从文件夹中创建URL数组(swift、音频)
我正在寻找一种方法,从包含声音文件的文件夹的内容中创建一个URL数组,以便稍后使用AVAudioplayer调用它们 我使用一个步进器和3个变量, 第一个称为nmbTracks,用于定义可播放声音文件的数量,并保存steppers maxvalue 第二个名为currentActiveTrack,定义播放器应该播放的文件。 第三个称为audioURL,用于向播放器提供信息,以及检索输出到标签的文件名。 然后,用户可以使用步进器逐步浏览声音文件 到目前为止,我所有的东西都在使用我的一些文件,但我不知道如何创建URL数组,也不知道如何从文件夹的内容中获取URL,下一步是让用户将自己的文件导入该文件夹Arrays 如何从文件夹中创建URL数组(swift、音频),arrays,swift,url,Arrays,Swift,Url,我正在寻找一种方法,从包含声音文件的文件夹的内容中创建一个URL数组,以便稍后使用AVAudioplayer调用它们 我使用一个步进器和3个变量, 第一个称为nmbTracks,用于定义可播放声音文件的数量,并保存steppers maxvalue 第二个名为currentActiveTrack,定义播放器应该播放的文件。 第三个称为audioURL,用于向播放器提供信息,以及检索输出到标签的文件名。 然后,用户可以使用步进器逐步浏览声音文件 到目前为止,我所有的东西都在使用我的一些文件,但我不
如果您能提供任何帮助,我将不胜感激。我相信还有一种更简单的方法可以做到这一点。我有两种选择。第一个返回一个
URL
s数组,如果提取文件夹时出错,则返回一个空数组
func getFolderContentsURLs(_ folderPath: String) -> [URL] {
let fm = FileManager()
guard let contents = try? fm.contentsOfDirectory(atPath: folderPath) else { return [] }
return contents.compactMap { URL.init(fileURLWithPath: $0) }
}
您可以如下方式显示结果:
let songsURLs = getFolderContentsURLs("/")
songsURLs.forEach {
print($0.absoluteString)
}
if let songsURLs2 = getFolderContentsURLsOrNil("NotExistingPath") {
songsURLs2.forEach {
print($0.absoluteString)
}
} else {
print("Unable to fetch contents")
}
第二个选项返回一个可选的URL
s数组,on error返回nil
func getFolderContentsURLsOrNil(_ folderPath: String) -> [URL]? {
let fm = FileManager()
guard let contents = try? fm.contentsOfDirectory(atPath: folderPath) else { return nil }
return contents.compactMap { URL.init(fileURLWithPath: $0) }
}
要查看结果,您可以这样做:
let songsURLs = getFolderContentsURLs("/")
songsURLs.forEach {
print($0.absoluteString)
}
if let songsURLs2 = getFolderContentsURLsOrNil("NotExistingPath") {
songsURLs2.forEach {
print($0.absoluteString)
}
} else {
print("Unable to fetch contents")
}
在回复@user12184258关于仅返回音频文件的评论时,您可以在获取文件夹内容后应用过滤器。过滤器可以使用UTTypeConformsTo
从MobileCoreServices
let contentsFolder = getFolderContentsURLs("/path/to/folder")
let audioFiles = contentsFolder
.filter { path in
// Try to create uniform type identifier using file's extension
guard let uti =
UTTypeCreatePreferredIdentifierForTag(
kUTTagClassFilenameExtension,
path.pathExtension as CFString, nil) else { return false }
// Checks conformance of UTI with kUTTypeAudio (abstract type for audio)
return UTTypeConformsTo((uti.takeRetainedValue()), kUTTypeAudio)
}
我找到了这个方法。苹果还有一个非常有用的功能,你可以检查一下,如果你只想要mp3文件,你可以使用
kuttypem3
如果我想让这个功能只显示音频文件的结果,可以用avaudioplayer播放呢?我刚刚编辑了答案,在文件夹的内容结果上使用了一个过滤器。