[swift-users] Closure typing changed in Swift 3

Rick Mann rmann at latencyzero.com
Fri Sep 9 22:05:32 CDT 2016


I figured it out. The real problem is that .json accepts AnyObject, and the Dictionary is not AnyObject (not sure what this change is, since it worked in Swift 2). Anyway, that confused the type inference, which resulted in the red herring error message about the closure assignment.


> On Sep 9, 2016, at 14:34 , Rick Mann via swift-users <swift-users at swift.org> wrote:
> 
> 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
> 
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users


-- 
Rick




-- 
Rick Mann
rmann at latencyzero.com




More information about the swift-users mailing list