2 Stimmen

Swift-Fehler "[T] ist kein Subtyp von"

Ich habe ein kleines Problem mit einem Swift-Tutorial...

func exchange(inout data:[T], i:Int, j:Int)
{
    let temp = data[i];
    data[i] = data[j];
    data[j] = temp;
}

func swapLeft(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

In swapLeft ruft der Austausch einen Fehler hervor:

Playground-Ausführung fehlgeschlagen: Fehler: :32:13: Fehler: '[T]' ist kein Subtyp von '@lvalue $T3'

Ich habe eine vage Vermutung, dass dies daran liegt, dass swapLeft eine Comparable-Generik verwendet, der Austausch jedoch eine nicht Comparable-Generik verwendet. Aber das Ändern von exchange zu func exchange... wird es nicht beheben. Weiß jemand, was man in diesem Fall tun kann?

3voto

Antonio Punkte 70773

Ihr Problem liegt immer noch am inout. Ihre Funktion swapLeft fehlt der inout Spezifizierer:

func swapLeft(inout data: [T], index:Int)

Und wenn Sie es aufrufen, müssen Sie das Array dereferenzieren:

swapLeft(&data, 6);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X