【发布时间】:2014-11-03 03:29:30
【问题描述】:
给定包中文件的名称,我想将文件加载到我的 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'
如果没有演员表,我会在随后的两行中收到错误。
谁能帮我拆分这个文件名和扩展名?
【问题讨论】:
-
您是否查看过专门用于处理路径的 NSString 方法(如 lastPathComponent 和 stringByDeletingPathExtension)?
-
你知道,如果我们 Objective-C 用户不得不忍受为了合并 Swift 而对文档所做的破坏行为,如果你 Swifties 看看它会很好。