Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
如何在Swift中生成泛型函数中let参数的可变副本_Swift_Generics_Testing - Fatal编程技术网

如何在Swift中生成泛型函数中let参数的可变副本

如何在Swift中生成泛型函数中let参数的可变副本,swift,generics,testing,Swift,Generics,Testing,我试图在Swift中创建一个通用的测试函数,它测试一个变异参数的函数。但是,我收到一条无法解决的错误消息: public func testMutating<T: Comparable>(id: Int, input: T, output: T, testObj: (T) -> Any) { var inputMutating = input // Make a mutable copy of input _ = testObj(&inputMuta

我试图在Swift中创建一个通用的测试函数,它测试一个变异参数的函数。但是,我收到一条无法解决的错误消息:

public func testMutating<T: Comparable>(id: Int, input: T, output: T, testObj: (T) -> Any) {
    var inputMutating = input   // Make a mutable copy of input
    _ = testObj(&inputMutating) // Compiler error: Argument type 'inout T' does not conform to expected type 'Comparable'

    if (inputMutating == output) {
        print("Test \(id) PASSED :D")
    } else {
        print("Test \(id) FAILED :(")
        print("  Expected: \(output)")
        print("  Actual  : \(inputMutating)")
    }
}
公共函数testMutating(id:Int,输入:T,输出:T,testObj:(T)->Any){ var inputMutating=input//制作输入的可变副本 _=testObj(&inputMutating)//编译器错误:参数类型“inout T”与预期类型“Compariable”不一致 if(输入突变==输出){ 打印(“测试\(id)通过:D”) }否则{ 打印(“测试\(id)失败:(”) 打印(“预期:\(输出)”) 打印(“实际:\(输入变化)”) } }
您需要将
testObj
参数设置为
inout

像这样:

public func testMutating<T: Comparable>(id: Int, input: T, output: T, testObj: (inout T) -> Any) {
公共函数testMutating(id:Int,input:T,output:T,testObj:(inout T)->Any){ 换句话说,
&inputmutation
不是您声明的类型
T
,而是类型
inout T


另外,如果您只是测试是否相等,最好使用
equalable
而不是
Comparable
作为泛型约束。

这样做了!还需要equalable才能使其编译。谢谢:)