2017-01-23 12 views
1

呼び出された関数がそれを変更し、変更がコールサイトに反映されるため、配列を参照渡しする必要があります。スウィフトの配列を参照することにより、値とNSArraysで渡されているので、私はとして関数を宣言しようとした:Swiftで特定のタイプのNSArrayを宣言するにはどうすればよいですか?

func save(_ photos: NSMutableArray<Photo>) { 

しかし、Xcodeは、私は非ジェネリック型NSMutableArrayのを特化することはできませんと言います。だから私はする必要があります:

func save(_ photos: NSMutableArray) { 

これは、タイプの安全性を失う。型の安全性と値渡しの両方を持つことができる方法はありますか?

答えて

3

あなたはNSMutableArrayを専門にすることはできません - Objective-Cだけがそれを行うことができます(皮肉なことですが?)。しかし、あなたは本当に必要はありません。

代わりにphotosinout [Photo]と宣言してください。それでも値渡しになりますが、変更された配列を元の場所に書き戻すことができます。

簡単な例:

var originalArray = [1,2,3] 
func modifyArray(_ array: inout [Int]) { 
    array = Array(array.dropFirst()) 
} 
modifyArray(&originalArray) 
originalArray // [2,3] 
+0

うーん...ありがとう。私はNSArrayを好む。なぜなら2つの配列を持っていても、一時的にさえ多くの質問が出るからだ。外部関数の途中で呼び出された他の関数が元の配列にアクセスするとどうなりますか?更新内容は表示されません。私が行方不明のものは何ですか? –

関連する問題