Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通用函数->;无法将返回表达式转换为返回类型_Ios_Swift_Generic Programming - Fatal编程技术网

Ios 通用函数->;无法将返回表达式转换为返回类型

Ios 通用函数->;无法将返回表达式转换为返回类型,ios,swift,generic-programming,Ios,Swift,Generic Programming,下面是我在使用泛型函数时遇到的一个小问题。可能是由于缺乏泛型实践而导致的基本错误。无论如何,下面是与问题相关的代码 通用函数本身,不显示任何错误: func setThingRevision<GenericType:Revisionable>(entity name: String) -> [(GenericType,Int)] { var resultArray = [(GenericType,Int)]() // ..... we do some usefu

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

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

func setThingRevision<GenericType:Revisionable>(entity name: String) -> [(GenericType,Int)] {
    var resultArray = [(GenericType,Int)]()
    // ..... we do some useful magic ......
    return resultArray
}
以下是编译器在最后一个函数(setMyRealStuffRevision)中给出的错误消息:

与其对这条消息感到惊讶,我想知道应该使用什么样的语法。

我的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
}
func setThingRevision(实体名称:String)->[(GenericType,Int)]{
var resultArray=[(GenericType,Int)]()
//此处名称包含核心数据实体的名称,getArrayFromEntity为
//一个局部函数,从实体的内容中提取数组。
对于getArrayFromEntity(名称)中的项目,其名称为![GenericType]{
resultArray.append((第99项))
返回结果数组
}
返回结果数组
}

关于类型安全语言如果无法完成“诱导”转换,编译器将告诉您该消息。不知何故,“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  {
}
func setThingRevision(实体名称:String)->[(T,Int)]{
var resultArray=[(T,Int)]()
//……我们做了一些有用的魔术。。。。。。
返回结果数组
}
func setMyRealStuffRevision(实体名称:字符串)->[(RealType,Int)]{
返回setThingRevision(实体:名称)
}
可修改的协议{
}
//编辑
类RealType:NSManagedObject,可修改{
}

我正在调查此事。现在,RealType完全拥有可修改协议所需的所有字段。但奇怪的是,我仍然得到同样的错误。做一些测试,看看是否可以将realArray类型转换为返回的类型。我真的很怀疑,但你还是可以试试。你是说相反的方法(将类型返回到realArray)?我正在尝试,但如果我想写“let x=setThingRevision(entity:“some name”)”之类的东西。我应该如何为泛型类型指定要使用的实际类型。我尝试的方法没有奏效?我想说的是,不要直接返回“setThingRevision(entity:name)”的值,而是执行“var dummy=setThingRevision(entity:name)”并检查dummy返回的类型。另外,尝试将dummy转换为setMyRealStuffRevision func中相同类型的另一个变量“dummy2”,以查看是否可以转换。确定。然后,我需要知道如何执行“var dummy=setThingRevision(entity:name)”,因为它说它无法推断类型(这是预期的)。在这种情况下,我如何告诉setThingRevision泛型类型使用什么?您能否编辑您的问题以提供一个演示错误的示例。让我看看是否可以做些什么。我可以说RealType是NSManagedObject的一个子类。我不太明白发生了什么,因为对我来说(即使RealType是从NSManagedObject继承的),这段代码是可构建的。@Paulw11。我编辑了这篇文章(请参见后面的---Addition---),希望这段添加的代码能够让您简单地进行测试。在我的案例中,我仍然会遇到与此测试代码相同的错误。它仍然不是一个-因为它不完整。请尝试提供完整的代码,而不是简单地粘贴到Xcode中会产生错误。e、 g.什么是
修改KanaArray
?这应该是
resultArray
?除了将GenericType更改为T之外还有什么意义?除了RealType之外,它是NSManagedObject的一个子类,而不是一个struct.T,我们用它作为约定,用它作为模板。通用类型或您不需要的。
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
}
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  {
}