这是我使用通用函数时遇到的一个小问题。可能是基本错误,这是由于缺乏通用的实践。无论如何,下面是与问题相关的代码。
通用函数本身,未显示任何错误:
=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)]'
答案 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 {
}