我目前正面临以下问题:我正在使用以下程序学习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的新手?
先谢谢,
答案 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"