[英]Using Reduce() function in IOS9 swift2.0
我正在學習Swift和Web服務。
當我嘗試在IOS 9中編譯以下代碼時,我得到了
reduce不可用:在序列上調用reduce()方法
private class func urlWithName(name: String, var args: [String: String]) -> NSURL
{
args["username"] = "ijoshsmith"
let
baseURL = "http://api.geonames.org/",
queryString = queryWithArgs(args),
absolutePath = baseURL + name + "?" + queryString
return NSURL(string: absolutePath)!
}
private class func queryWithArgs(args: [String: String]) -> String
{
let parts: [String] = reduce(args, [])
{
result, pair in
let
key = pair.0,
value = pair.1,
part = "\(key)=\(value)"
return result + [part]
}
return (parts as NSArray).componentsJoinedByString("&")
}
因此,我知道我應該將reduce(args,[])轉換為類似args.reduce(initial:T,Combine:(T,Self.Generator.Element)throw-> T)之類的東西。 有人可以幫我解釋和轉換它嗎?
謝謝。
let parts: [String] = reduce(args, [])
您試圖將reduce
作為獨立函數進行調用,但這實際上是SequenceType
協議中的一種方法,被Array
采納。 假設args
是您要應用reduce
的數組,則可以這樣稱呼它:
foo = args.reduce(t, f)
其中t
是初始值, f
是組合函數。
正確的語法如下所示:
private class func queryWithArgs(args: [String: String]) -> String
{
let parts: [String] = args.reduce([]) {
result, pair in
let
key = pair.0,
value = pair.1,
part = "\(key)=\(value)"
return result + [part]
}
return parts.joinWithSeparator("&")
}
我還更新了您的返回值,以避免進行NSArray
。
您可能還希望看到Alamofire的ParameterEncoding.swift ,它對已編寫的參數編碼具有更全面的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.