2016-07-27 4 views
4

私はクラスのパラメータとしてポインタを持っていたいと思います。私はINITをコーディングしようとしているときしかし、私はこのエラーが生じています:Cannot pass immutable value of type 'AnyObject?' as inout argumentinoutの引数としての不変の値

class MyClass { 
    var valuePointer: UnsafeMutablePointer<AnyObject?> 

    init(value: inout AnyObject?) { 
     self.valuePointer = &value 
    } 
} 

私はすべて同じ「値」を参照することができMyClassのいくつかのインスタンスを作成したいと思います。次に、このクラスでこの値を編集しているときは、他の場所ではこの値が変更されます。

私がSwiftのポインターで作業しているのは初めてです。私は、オブジェクトを初期化するときは、ポインタを送ることができ

答えて

8

cannot pass immutable value as inout argumentというエラーがあります。引数がオプションではないことを確認してください。 Inout型はオプションの値が好きではないようです。

+0

これはLinux Swiftの私の問題を修正しました。ありがとう! 完全なエラーメッセージ: _error:inout引数として不変の値を渡すことはできません: '[String:Any?]'から '[String:Any?]'への暗黙的な変換** '**は一時的なものが必要です は、 off:シグネチャのinoutパラメータを[String:Any]に変更することで、コンパイラはこれ以上文句を言わなかった。 –

2

...私はそれが間違ってやっていると思います:

class MyClass { 
    var valuePointer: UnsafeMutablePointer<AnyObject?> 

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

MyClassを初期化するときだけポインタ参照を追加します。

人のために
let obj = MyClass(value: &obj2) 
+0

ありがとう@andriosr、私はそれを試みたが、私は私のクラスを初期化するとき別の問題があります: 'タイプ '文字列の値を変換できませんか?'期待される引数型 'UnsafeMutablePointer 'に変換します。私はしています: 'let obj = MyClass(値:&firstName)'(これは文字列ですか?)。私は理由を見ません... – Tulleb

+1

私は私の答えを見つけたと思う。どうやら私は最初にキャストしなければならない。前に '&'を追加するのと同じくらい単純ではありません。これは私が見つけたコードです: 'UnsafeMutablePointer (((firstName)!as NSString).utf8String!))' – Tulleb

+0

それは素晴らしいです!あなたが私の答えをこの解決策で更新したいのであれば、あなた自身で投稿してください。他人がそれを利用できるように:) – andriosr

関連する問題