无法转换NSURL类型的值?期望的_型参数?

时间:2015-11-11 22:22:08

标签: ios swift generics

我正在努力使用仿制药更加舒服,而且我多次遇到这个问题。我得到一个编译错误,它告诉我它不能将'type'转换为期望的参数类型'_'。我无法理解这个错误。我认为指定一个通用参数允许你传入任何类型?或者这不是我在做什么?

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 个答案:

答案 0 :(得分:1)

这是因为你的+++ func没有返回任何内容。

由于urlFormat(string) +++ dataFormat没有任何回复,因此左侧没有任何内容,因此调用+++ imageFormat不起作用。

您只需要更改+++,以便它具有这样的返回值。

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