ios - 如何在 Swift 中从文件扩展名中拆分文件名?

标签 ios string swift

给定包中文件的名称,我想将该文件加载到我的 Swift 应用程序中。所以我需要使用这个方法:

let soundURL = NSBundle.mainBundle().URLForResource(fname, withExtension: ext)

无论出于何种原因,该方法都需要将文件名与文件扩展名分开。很好,在大多数语言中很容易将两者分开。但到目前为止,我还没有发现它在 Swift 中如此。

这就是我所拥有的:

var rt: String.Index = fileName.rangeOfString(".", options:NSStringCompareOptions.BackwardsSearch)
var fname: String = fileName .substringToIndex(rt)
var ext = fileName.substringFromIndex(rt)

如果我不包括第一行的输入,我会在随后的两行中得到错误。有了它,我在第一行遇到错误:

Cannot convert the expression's type '(UnicodeScalarLiteralConvertible, options: NSStringCompareOptions)' to type 'UnicodeScalarLiteralConvertible'

如何将文件名与扩展名分开?有什么优雅的方法可以做到这一点吗?

我对 Swift 非常兴奋,因为它似乎是一种比 Objective C 优雅得多的语言。但现在我发现它有它自己的笨拙之处。


第二次尝试:我决定制作自己的字符串搜索方法:

func rfind(haystack: String, needle: Character) -> Int {
    var a = Array(haystack)

    for var i = a.count - 1; i >= 0; i-- {
        println(a[i])
        if a[i] == needle {
            println(i)
            return i;
        }
    }
    return -1
}

但现在我在行 var rt: String.Index = rfind(fileName, needle: ".") 上收到错误:

'Int' is not convertible to 'String.Index'

如果没有强制转换,我会在后续两行中收到错误。

谁能帮我拆分这个文件名和扩展名?

最佳答案

Swift 5.0 更新:

正如评论中指出的,您可以使用它。

let filename: NSString = "bottom_bar.png"
let pathExtention = filename.pathExtension
let pathPrefix = filename.deletingPathExtension

关于ios - 如何在 Swift 中从文件扩展名中拆分文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26707352/

相关文章:

ios - 在 iOS 中添加谷歌分析应用程序所需的 header

ios - 调用函数为类成员设置标签

c++ - 读取/存储不同类型的字符串(utf8/utf16/ansi)

iOS + MKMapView 用户触摸绘图

算术加法和字符串连接之间的Java '+'运算符?

c# - 字节数组的字符串表示

使用 CAShapeLayer 的 Swift 风格 UIView

ios - Google Maps iOS SDK 上只有一个标记

iphone - 使用标签栏和导航 Controller , View 被解除到错误的 View

ios - 在 Xcode 7.2 中将 PDF 用于图标图像