如何在Swift中生成泛型函数中let参数的可变副本
我试图在Swift中创建一个通用的测试函数,它测试一个变异参数的函数。但是,我收到一条无法解决的错误消息:如何在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
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才能使其编译。谢谢:)