我想将指针作为类的参数。但是当我尝试编写init时,我遇到了这个错误:Cannot pass immutable value of type 'AnyObject?' as inout argument
class MyClass {
var valuePointer: UnsafeMutablePointer<AnyObject?>
init(value: inout AnyObject?) {
self.valuePointer = &value
}
}
我想创建一些MyClass的实例,它们都可以引用相同的“值”。然后,当我在这个类中编辑这个值时,它会在其他地方改变。
这是我第一次使用Swift中的指针。我想我做错了......
答案 0 :(得分:15)
对于cannot pass immutable value as inout argument
错误的人。首先检查您的参数是否为可选参数。 Inout类型似乎不喜欢可选值。
答案 1 :(得分:2)
初始化对象时可以发送指针:
class MyClass {
var valuePointer: UnsafeMutablePointer<AnyObject?>
init(value: inout UnsafeMutablePointer<AnyObject?>) {
self.valuePointer = value
}
}
在初始化MyClass
时添加指针引用:
let obj = MyClass(value: &obj2)
答案 2 :(得分:0)
对我来说,我有一个这样定义的类变量:
// file MyClass.swift
class MyClass{
var myVariable:SomeClass!
var otherVariable:OtherClass!
...
func someFunction(){
otherVariable.delegateFunction(parameter: &myVariable) // error
}
}
// file OtherClass.swift
class OtherClass{
func delegateFunction(parameter: inout myVariable){
// modify myVariable's data members
}
}
被调用的错误是:
Cannot pass immutable value as inout argument: 'self' is immutable
然后我将MyClass.swift中的变量声明更改为不再具有!而是最初指向某个类的虚拟实例。
var myVariable:SomeClass = SomeClass()
然后,我的代码能够按预期进行编译和运行。所以...不知何故拥有!在类变量上,将阻止您将该变量作为inout变量传递。我不懂为什么。
答案 3 :(得分:0)
对于与我面临相同问题的人:
using (new TestCulture()) {
// Tests which should be run under the specific culture
}
代码如下:
Cannot pass immutable value as inout argument: implicit conversion from '' to '' requires a temporary
从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
更改为var f = Foo(a: "First String")
修复了错误。
答案 4 :(得分:0)
对我来说,我在这样的函数调用中传递直接值。
public func testInout(_ a : inout [Int]) -> Int {
return a.reduce(0, +)
}
testInout(&[1,2,4]) // Getting the error :- Cannot pass immutable value of type '[Int]' as inout argument. Because by default the function parameters are constant.
要消除上述错误,您需要传递具有 var 类型的数组。如下图。
var arr = [1, 2, 3]
public func testInout(_ a : inout [Int]) -> Int {
return a.reduce(0, +)
}
testInout(&arr)