Unveränderlich Wert als inout-argument
Ich würde gerne einen pointer als parameter einer Klasse. Aber wenn ich versuche, code der init, habe ich dieses Fehler: Cannot pass immutable value of type 'AnyObject?' as inout argument
class MyClass {
var valuePointer: UnsafeMutablePointer<AnyObject?>
init(value: inout AnyObject?) {
self.valuePointer = &value
}
}
Möchte ich erstellen Sie eine Instanz von MyClass die können alle beziehen sich auf den gleichen "Wert". Dann, wenn ich bin Bearbeiten Sie diesen Wert in dieser Klasse, es würde sich ändern, sonst überall.
Dies ist das erste mal arbeite ich mit dem Mauszeiger in Swift. Ich glaube, ich mache es falsch...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für diejenigen, die hat die
cannot pass immutable value as inout argument
Fehler. Überprüfen Sie, dass Ihr argument ist nicht optional vor. Inout Typ scheint nicht zu mögen optionale Werte.Könnten Sie schicken den Zeiger bei der Initialisierung des Objekts:
Fügen Sie einfach die pointer-Referenz beim initialisieren
MyClass
:Cannot convert value of type 'String?' to expected argument type 'UnsafeMutablePointer<AnyObject?>'
. Ich bin dabei:let obj = MyClass(value: &firstName)
(was ist ein String?). Ich sehe nicht ein, warum...&
vor... Hier ist der code, den ich gefunden habe:UnsafeMutablePointer<AnyObject?>(((firstName)! as NSString).utf8String!))
Für mich, ich hatte eine Klasse variable, die wie folgt definiert:
Gibt es Fehler, die aufgerufen wurde, war:
Ich dann meine geänderte Deklaration von Variablen in MyClass.swift nicht mehr zu haben ! und stattdessen zunächst ein dummy-Instanz einer Klasse.
Mein code war dann in der Lage zu kompilieren und auszuführen als gedacht. Also... irgendwie haben die ! auf eine Klasse, variable verhindert, dass Sie die übergabe der variable als inout variable. Ich verstehe nicht, warum.
Für jemand vor dem gleichen Problem mit mir:
Cannot pass immutable value as inout argument: implicit conversion from '' to '' requires a temporary
Den code wie folgt:
Ändern von
var f = Foo(a: "First String")
zuvar f: FooProtocol = Foo(a: "First String")
den Fehler behoben.