[swift-users] Closure typing changed in Swift 3

Rick Mann rmann at latencyzero.com
Fri Sep 9 16:34:46 CDT 2016


I have some code that implements an HTTP server. You use it like this:

server["/some/path"] =
{ inReq in
    return .ok(.json(["key" : "value"]))
}

".ok" is a case in the HttpResponse enum.

The subscript on "server" above looks like this:

class HttpServer {
    typealias Handler = (HttpRequest) -> HttpResponse

    subscript (path: String) -> Handler?
    {
        get { return nil }
        set ( newValue )
        {
            ...store in dictionary of path:Handler...
        }
    }
}

Unfortunately, in Swift 3, I get "Cannot assign value of type '(_) -> _' to type 'HttpServer.Handler?'"

It seems the type inference is working differently? I tried { (inReq: HttpRequest) in ... }, but I got the same error with a slightly different type signature.

Can anyone tell me what's changed?

TIA,

-- 
Rick Mann
rmann at latencyzero.com




More information about the swift-users mailing list