I would like to have a pointer as a parameter of a class. But when I am trying to code the init, I am having this error: Cannot pass immutable value of type 'AnyObject?' as inout argument
class MyClass {
var valuePointer: UnsafeMutablePointer<AnyObject?>
init(value: inout AnyObject?) {
self.valuePointer = &value
}
}
I would like to create some instance of MyClass which can all refer to the same "value". Then, when I am editing this value in this class, it would change everywhere else.
This is the first time I'm working with pointer in Swift. I guess I am doing it wrong...
For those who has the cannot pass immutable value as inout argument
error. Check that your argument is not optional first. Inout type doesn't seems to like optional values.
You could send the pointer when initializing the object:
class MyClass {
var valuePointer: UnsafeMutablePointer<AnyObject?>
init(value: inout UnsafeMutablePointer<AnyObject?>) {
self.valuePointer = value
}
}
Just add the pointer reference when initializing MyClass
:
let obj = MyClass(value: &obj2)
For someone faced the same issue with me:
Cannot pass immutable value as inout argument: implicit conversion from '' to '' requires a temporary
The code as below:
protocol FooProtocol {
var a: String{get set}
}
class Foo: FooProtocol {
var a: String
init(a: String) {
self.a = a
}
}
func update(foo: inout FooProtocol) {
foo.a = "new string"
}
var f = Foo(a: "First String")
update(foo: &f)//Error: Cannot pass immutable value as inout argument: implicit conversion from 'Foo' to 'FooProtocol' requires a temporary
Change from var f = Foo(a: "First String")
to var f: FooProtocol = Foo(a: "First String")
fixed the Error.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With