2017-08-17 145 views
2

P和R是泛型类型无法转换类型'[String:Any]'的值?'到期望的参数类型'_?'

open func route<P,R>(url:URL , param : P?) -> R?{ 
    guard let s = url.scheme ,let h = url.host else{ 
     #if DEBUG 
      print("url error") 
     #endif 
     return nil 
    } 

    let urlString = "\(s)://\(h)\(url.path)" 


    guard let t = self.urlTaskMap[urlString] as? RoyTaskClosure<P,R> else { 

     print("closure unmatched,url -> \(urlString)") 

     return nil 
    } 

    let returnValue = t(param) 

    return returnValue 
} 

当我调用该函数像

public func viewController(url:URL,param:[String:Any]?) -> RoyProtocol?{ 
    if let vc = self.route(url: url, param: param){ 
     return vc 
    } 
    return nil 
} 

Xcode的告诉我一个错误信息

Cannot convert value of type '[String:Any]?' to expected argument type '_?' 

神!有人可以告诉我如何解决它?

+1

请在适当代码格式化你的问题的代码,不包括它的屏幕截图。 –

+3

请将代码粘贴为文字而不是使用图片。为什么人们这样做呢? *如何更容易制作屏幕截图,裁剪和上传,而不仅仅是Ctrl + C,Ctrl + V文本? –

+0

屏幕截图中的类型P是什么? –

回答

0

我得到了solution.Replace你的方法与此

public func viewController(url:URL,param:[String:Any]?) -> RoyProtocol?{ 
    let vc: RoyProtocol? = self.route(url: url, param: param) 
    return vc 
} 
+0

这很好,但是我认识到当我调用像let vc:RoyProtocol这样的函数时, = self.route(url:url,param:nil)'它显示相同的错误 –

+0

我知道这很奇怪,但你可以试试 让_:RoyProtocol? =路线(网址:网址,参数:可选。无) 如果您想通过网络 –

相关问题