我正在努力使用仿制药更加舒服,而且我多次遇到这个问题。我得到一个编译错误,它告诉我它不能将'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
}
答案 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
}