簡體   English   中英

在iOS9 swift2.0中使用Reduce()函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM