14

我想有一个指针作为类的参数。但是当我尝试对 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 中使用指针。我想我做错了......

4

5 回答 5

19

对于那些有cannot pass immutable value as inout argument错误的人。首先检查您的论点是否不是可选的。Inout 类型似乎不喜欢可选值。

于 2016-08-01T09:35:23.007 回答
3

您可以在初始化对象时发送指针:

class MyClass {
    var valuePointer: UnsafeMutablePointer<AnyObject?>

    init(value: inout UnsafeMutablePointer<AnyObject?>) {
        self.valuePointer = value
    }
}

初始化时只需添加指针引用MyClass

let obj = MyClass(value: &obj2)
于 2016-07-27T15:07:22.063 回答
2

对于与我面临同样问题的人:

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")var f: FooProtocol = Foo(a: "First String")修复错误。

于 2019-03-27T07:48:47.700 回答
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)
于 2021-06-19T09:53:38.100 回答
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() 

然后我的代码能够按预期编译和运行。所以......不知何故拥有!on 类变量会阻止您将该变量作为 inout 变量传递。我不懂为什么。

于 2018-06-28T22:09:25.787 回答