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

时间:2019-02-09 04:17:06

标签: ios swift generic-programming

这是我使用通用函数时遇到的一个小问题。可能是基本错误,这是由于缺乏通用的实践。无论如何,下面是与问题相关的代码。

通用函数本身,未显示任何错误:

=IF(OR(B1=1,B1=4),"Goalie",IF(B2=2,"Defender","MidField"))

使用上述通用函数的某些代码:

func setThingRevision<GenericType:Revisionable>(entity name: String) -> [(GenericType,Int)] {
    var resultArray = [(GenericType,Int)]()
    // ..... we do some useful magic ......
    return resultArray
}

这是编译器在最后一个函数(setMyRealStuffRevision)中给出的错误消息:

func setMyRealStuffRevision(entity name: String) -> [(RealType,Int)] {
    return setThingRevision(entity: name)
}

我不奇怪消息是什么,所以我想知道使用哪种正确的语法。

我的 RealType GenericType 兼容,但是我不确定是否需要为setThingRevision泛型函数提供某些信息,或者是否可以从上下文中推断出这些信息。

---加法---

这是我出于测试目的而创建的伪造的 setThingRevision

Cannot convert return expression of type '[(_, Int)]' to return type '[(RealType, Int)]'

2 个答案:

答案 0 :(得分:0)

在类型安全的语言上,如果无法完成“诱导”转换,则编译器将告诉您该消息。不知何故'var resultArray =(GenericType,Int)'不能解释为可以转换为返回函数类型的类型。仔细检查编译器分配的resultArray的类型。使用的正确语法将不是使用'var'创建resultArray变量,而是显式定义类型。

答案 1 :(得分:0)

尝试

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  {
}