繁体   English   中英

泛型函数 - >无法将返回表达式转换为返回类型

[英]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)]'

我不知道该消息是什么 ,而不是对消息感到惊讶

我的RealTypeGenericType兼容,但我不确定是否需要向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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM