![](/img/trans.png)
[英]Cannot convert return expression of generic protocol's function type implementation
[英]Generic function -> Cannot convert return expression to return type
这是我使用泛型函数的一个小问题。 由于缺乏泛型练习,可能是一个基本错误。 无论如何,下面是与问题相关的代码。
泛型函数本身,没有显示任何错误:
func setThingRevision<GenericType:Revisionable>(entity name: String) -> [(GenericType,Int)] {
var resultArray = [(GenericType,Int)]()
// ..... we do some useful magic ......
return resultArray
}
一些代码使用上面的泛型函数:
func setMyRealStuffRevision(entity name: String) -> [(RealType,Int)] {
return setThingRevision(entity: name)
}
以下是编译器在最后一个函数(setMyRealStuffRevision)中给出的错误消息:
Cannot convert return expression of type '[(_, Int)]' to return type '[(RealType, Int)]'
我不知道该消息是什么 ,而不是对消息感到惊讶。
我的RealType与GenericType兼容,但我不确定是否需要向setThingRevision泛型函数提供一些信息,或者是否可以从上下文中推断出它。
---加法---
这是我为测试目的创建的假setThingRevision 。
func setThingRevision<GenericType:Revisionable>(entity name: String) -> [(GenericType,Int)] {
var resultArray = [(GenericType,Int)]()
// Here name contains the name of a Core Data entity and getArrayFromEntity is
// a local function, extracting an array from the contents of the entity.
for item in getArrayFromEntity(name) as! [GenericType] {
resultArray.append((item, 99))
return resultArray
}
return resultArray
}
在类型安全的语言中,如果无法进行“诱导”转换,编译器会告诉您该消息。 不知何故'var resultArray =(GenericType,Int)'它不被解释为可以转换为返回函数类型的类型。 仔细检查编译器分配的resultArray的类型。 使用正确的语法不是使用'var'来创建resultArray变量,而是显式定义类型。
尝试这个
func setThingRevision<T: Revisionable>(entity name: String) -> [(T, Int)] {
var resultArray = [(T, Int)]()
// ..... we do some useful magic ......
return resultArray
}
func setMyRealStuffRevision(entity name: String) -> [(RealType, Int)] {
return setThingRevision(entity: name)
}
protocol Revisionable {
}
// edited
class RealType: NSManagedObject, Revisionable {
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.