Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 在swift中以编程方式格式化字符串_Macos_Swift - Fatal编程技术网

Macos 在swift中以编程方式格式化字符串

Macos 在swift中以编程方式格式化字符串,macos,swift,Macos,Swift,我有绳子 var arrayWithStrings = ["813 - Crying Flute.mp3", "Ark Patrol - Never.mp3"] 我想去 var stringTitle1 = "813" var stringNameOfTrack1 = "CryingFlute" var stringFormat1 = "mp3" var stringTitle2 = "Ark Patrol" var stringNameOfTrack2 = "Never" var strin

我有绳子

var arrayWithStrings = ["813 - Crying Flute.mp3", "Ark Patrol - Never.mp3"]
我想去

var stringTitle1 = "813"
var stringNameOfTrack1 = "CryingFlute"
var stringFormat1 = "mp3"
var stringTitle2 = "Ark Patrol"
var stringNameOfTrack2 = "Never"
var stringFormat2 = "mp3"

如何以编程方式执行此操作?

您可以使用正则表达式:

let string = "813 - Crying Flute.mp3"

let regex = try! NSRegularExpression(pattern: "^(.*) - (.*)\\.(.*)$")

if let match = regex.firstMatch(in: string, range: string.nsRange) {
    let title  = string[match.range(at: 1)]
    let name   = string[match.range(at: 2)]
    let format = string[match.range(at: 3)]
}
其中,在Swift 4中:

extension String {

    /// An `NSRange` that represents the full range of the string.

    var nsRange: NSRange {
        return NSRange(startIndex ..< endIndex, in: self)
    }

    /// Substring from `NSRange`
    ///
    /// - Parameter nsRange: `NSRange` within the string.
    /// - Returns: `Substring` with the given `NSRange`, or `nil` if the range can't be converted.

    subscript(nsRange: NSRange) -> Substring? {
        return Range(nsRange, in: self)
            .flatMap { self[$0] }
    }
}
扩展字符串{
///表示字符串完整范围的'NSRange'。
变量nsRange:nsRange{
返回NSRange(startIndex..子字符串{
返回范围(nsRange,in:self)
.flatMap{self[$0]}
}
}

正则表达式的
是用来标识子字符串的“捕获括号”,可以通过
范围(at:)
来标识子字符串。

您可以根据需要使用正则表达式来匹配数组中的每个元素。@Rob否,我需要从数组元素获取它。@Rob i尽管您在模式中有错误,它应该是
“^(.*)-(.*)\\.(.*)$”
,因为开头并不总是数字,它可以是关于问题中数组的字母。谢谢我只是专注于第一个例子。