无法使用类型'(String,(String) - > Bool)'的参数列表调用'split'。斯威夫特2

时间:2015-09-27 16:40:41

标签: ios xcode swift2

我目前正面临以下问题:我正在使用以下程序学习Swift和OAuth:https://github.com/soundcloud/iOSOAuthDemo

错误如下:

  

无法使用类型'(String,(String) - > Bool)'的参数列表调用'split'

使用此代码段:

private func parameterValue(name: String, fragment: String) -> String? {
    let pairs = split(fragment) { $0 == "&" }.filter({ pair in pair.hasPrefix(name + "=") })
    if pairs.count > 0 {
        return split(pairs[0]) { $0 == "=" }[1]
    } else {
        return nil
    }
}

指导意见是:

  

预期类型为'的参数列表'(S,maxSplit:Int,allowEmptySlices:Bool,isSeparator:@noescape(S.Generator.Element) - > R)'

是否有人可以帮助我删除此错误,因为我是Swift和Swift 2.0的新手?

先谢谢,

1 个答案:

答案 0 :(得分:0)

这个重复链接的主要思想是向您展示在Swift 2中String不再是一个集合,您必须使用String的characters属性(并且split不是一个全球性的功能)。您还必须将某些类型返回String。例如:

private func parameterValue(name: String, fragment: String) -> String? {
    let pairs = fragment.characters.split { $0 == "&" }.filter({ pair in String(pair).hasPrefix(name + "=") })
    if pairs.count > 0 {
        let subseq = pairs[0].split { $0 == "=" }.map { String($0) }
        return subseq[1]
    }
    return nil
}

parameterValue("mike", fragment: "&mike=test")  // "test"

请注意,您可以使用String的componentsSeparatedByString方法使您的函数看起来更简单:

private func parameterValue(name: String, fragment: String) -> String? {
    let pairs = fragment.componentsSeparatedByString("&").filter { $0.hasPrefix(name + "=") }
    if !pairs.isEmpty {
        return pairs[0].componentsSeparatedByString("=")[1]
    }
    return nil
}

parameterValue("mike", fragment: "&mike=test")  // "test"