Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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 将Swift泛型数组转换为特定类型_Ios_Swift_Generics - Fatal编程技术网

Ios 将Swift泛型数组转换为特定类型

Ios 将Swift泛型数组转换为特定类型,ios,swift,generics,Ios,Swift,Generics,我正在编写一个需要返回一个项目数组的函数。在函数中,将有一些逻辑确定我希望从函数返回的项的类型。我开始这样做: func testFunc<T>(option:Int) -> [T] { var result:[T] = [] switch option { case 1: let sampleString:String = "hello" result.append(sampleString) case 2:

我正在编写一个需要返回一个项目数组的函数。在函数中,将有一些逻辑确定我希望从函数返回的项的类型。我开始这样做:

func testFunc<T>(option:Int) -> [T] {
    var result:[T] = []

    switch option {
    case 1:
        let sampleString:String = "hello"
        result.append(sampleString)
    case 2:
        let sampleInt:Int = 23
        result.append(sampleInt)
    default:
        return result
    }

    return result
}
这是有道理的,但是,我正在努力想办法解决我的问题。当我调用函数时,我不知道返回的数组中是什么类型,但函数在开始向数组追加项之前知道如何确定类型


如何在Swift中实现这一点?

Swift不支持多种类型的变量。使用泛型T使函数泛型,以便调用者可以选择返回类型。 你应该重新考虑你的设计

如果确实希望基于一个参数返回多个结果类型,有几种解决方法:

1:使用任意数组

var result:[Any] = []
2:使用具有关联值的枚举

enum TestFuncResult {
    case string(String)
    case int(Int)
}

func testFunc(option: Int) -> [TestFuncResult] {
    var result:[TestFuncResult] = []

    switch option {
    case 1:
        let sampleString:String = "hello"
        result.append(.string(sampleString))
    case 2:
        let sampleInt:Int = 23
        result.append(.int(sampleInt))
    default:
        return result
    }

    return result
}

Swift不支持具有多种类型的变量。使用泛型T使函数泛型,以便调用者可以选择返回类型。 你应该重新考虑你的设计

如果确实希望基于一个参数返回多个结果类型,有几种解决方法:

1:使用任意数组

var result:[Any] = []
2:使用具有关联值的枚举

enum TestFuncResult {
    case string(String)
    case int(Int)
}

func testFunc(option: Int) -> [TestFuncResult] {
    var result:[TestFuncResult] = []

    switch option {
    case 1:
        let sampleString:String = "hello"
        result.append(.string(sampleString))
    case 2:
        let sampleInt:Int = 23
        result.append(.int(sampleInt))
    default:
        return result
    }

    return result
}

类型检查器不知道
开关
es;它无法根据
选项的值
计算出T的值。是否有理由不能将其分为两个函数?如果返回类型与输入类型无关,只需返回任何Swift 3或任何对象Swift 2的数组,类型检查器不知道有关
开关的信息
es;它无法根据
选项的值
计算出T的值。有没有理由不能将其分成两个函数?如果返回类型与输入类型无关,只需返回任意Swift 3或任意对象Swift 2的数组即可