2015-11-11 119 views
0

我正在努力使泛型變得更加舒適,並且我多次遇到這個問題。我得到一個編譯器錯誤,它告訴我它不能將'type'轉換爲期望的參數類型'_'。我無法理解這個錯誤。我認爲指定一個泛型參數可以讓你傳入任何類型?或者那不是我在做什麼?無法轉換NSURL類型的值?預期的類型_的參數?

infix operator +++ { associativity left } 

funC+++<A, B>(a:A?, f:A -> B?) { 
    if let x = a { 
     f(x) 
    } 
} 

func stringToImage(string:String, completion:(Result<UIImage>) ->()) { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { 

     if let image:UIImage = urlFormat(string) +++ dataFormat +++ imageFormat { --- Cannot convert value of type NSURL? to expected argument of type _? 

     } 

    }) 
} 

func urlFormat(s:String) -> NSURL? { 
    if let url = NSURL(string: s) { 
     return url 
    } 
    return nil 
} 

func dataFormat(url:NSURL?) -> NSData? { 
if let u = url { 
    if let d = NSData(contentsOfURL: u) { 
     return d 
     } 
    } 
    return nil 
} 

func imageFormat(d:NSData?) -> UIImage? { 
    if let data = d { 
     if let image = UIImage(data: data) { 
      return image 
     } 
    } 
    return nil 
} 

回答

1

這是因爲你的+++ func不會返回任何東西。

由於urlFormat(string) +++ dataFormat沒有任何回報,致電+++ imageFormat不起作用,因爲左側沒有任何東西。

你只需要改變+++,所以它有這樣的返回值。

funC+++<A, B>(a:A?, f:A -> B?) -> B? { 
    if let x = a { 
     return f(x) 
    } 
    return nil 
} 
+0

mm我覺得啞巴。謝謝。 – Trace

相關問題