2017-08-17 92 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? =路線(網址:網址,參數:可選。無) 如果您想通過網絡 –

相關問題