语法从Swift更改为Swift 2,无法使用字符串和额外的NSErrorPointer参数调用enumerate

语法从Swift更改为Swift 2,无法使用字符串和额外的NSErrorPointer参数调用enumerate,swift,string,swift2,Swift,String,Swift2,我正在使用Xcode 6开发Swift 1.2,但现在我已经使用Swift 2.1安装了Xcode 7。Swift 2.1中有许多错误和许多语法更改,尽管我的代码在Swift 1.2中运行良好。第一个问题是这种方法: func getSubstringUpToIndex(index: Int, fromString str: String) -> String { var substring = "" for (i, letter) in enumerate(str) {

我正在使用Xcode 6开发Swift 1.2,但现在我已经使用Swift 2.1安装了Xcode 7。Swift 2.1中有许多错误和许多语法更改,尽管我的代码在Swift 1.2中运行良好。第一个问题是这种方法:

func getSubstringUpToIndex(index: Int, fromString str: String) -> String
{
    var substring = ""

    for (i, letter) in enumerate(str) {
        substring.append(letter)

        if i == index - 1 {
            break
        }
    }

    return substring
}
此行出现另一个问题,调用中的额外参数“error”:

let jsonResult: Dictionary = NSJSONSerialization.JSONObjectWithData(self.mutableData, options: NSJSONReadingOptions.MutableContainers, error: &error) as! Dictionary<String, AnyObject>

在这两种情况下,它都是Swift 1.2代码,而不是2.0

在第一段代码中,enumerate方法不再存在,您可以通过以下方式对其进行更新:

func getSubstringUpToIndex(index: Int,
        fromString str: String) -> String
{
    var substring = ""

    for (i, letter) in str.characters.enumerate() {

        substring.append(letter)

        if i == index - 1 {
            break
        }
    }

    return substring
}
或者通过这种方式,使用substringRithRange:

试穿一下

粘贴的第二行不再有效,因为swift 2现在使用try/do/catch处理错误,最后一个参数nsErrorInter不再存在,请了解更多信息。

和的可能重复项
func getSubstringUpToIndex2(index: Int,
        fromString str: String) -> String {
    let range = str.startIndex.advancedBy(0)..<str.startIndex.advancedBy(index)
    return str.substringWithRange(range)
}