使用Swift教程遇到一些麻烦...
func exchange<T>(inout data:[T], i:Int, j:Int)
{
let temp = data[i];
data[i] = data[j];
data[j] = temp;
}
func swapLeft<T: Comparable>(data: [T], index:Int)
{
for i in reverse(1...index)
{
if (data[i] < data[i - 1])
{
exchange(&data, i, i - 1);
}
else
{
break;
}
}
}
var data = [Int]();
data = [84, 0, 1, 63, 20, 12, 11, 63, 13, 99, 89, 98, 94, 31, 88, 48, 90, 30, 68, 43];
swapLeft(data, 6);
data
在swapLeft
中,交换呼叫产生错误:
游乐场执行失败:错误:: 32:13:错误:'[T]'不是'@lvalue $ T3'的子类型
我有一个模糊的假设,那是因为swapLeft
使用了Comparable泛型,但是交换使用了非Comparable。但是将交换更改为func exchange<T: Comparable>...
不会修复它。有谁知道该怎么做?
答案 0 :(得分:3)
您的问题仍然是inout
。您的swapLeft
函数缺少inout
说明符:
func swapLeft<T: Comparable>(inout data: [T], index:Int)
当你调用它时,你必须对数组进行解除分配:
swapLeft(&data, 6);