2016-11-04 6 views
-1

を機能をリファクタリングするために、私は世界的に利用できるそれを置くしようとしている::コンストラクタのパラメータ不変

func loadUsers(_ users: [User] , _ tableView: UITableView) { 

    let usersRef = firebase.child("Users") 
    usersRef.observe(.value, with: { snapshot in 
     if snapshot.exists() { 

       users.removeAll() 
       ... 
    } 

私が受けている:

は不変の値にメンバーを変異使用することはできません:

func loadUsers(_ users: [User] , _ tableView: UITableView) { 

    let usersRef = firebase.child("Users") 
    usersRef.observe(.value, with: { snapshot in 
     if snapshot.exists() { 

      if var users = users as? [User] { 
       users.removeAll() 
       ... 
} 
0: 'ユーザー' は、一定の

私が設定 'しましょう' です

それは構築し、動作しますが、私は常に警告を受け取る:

から条件付きキャスト「[ユーザー]」から「[ユーザー]」は常に

そして タイプの非オプションの式」を成功[ユーザー]オプションのチェックに使用

私の問題を解決する最良の方法は何ですか?ヘルプは非常に感謝しています。

PS、元の値はusersから削除する必要があります。

答えて

1

最初のコードセットのエラーは、パラメータが不変であるためです。

2番目のコードセットのエラーは、if letを非オプションの定数で使用しようとしているため、キャストを無意味にする同じタイプにキャストしようとしているためです。

あなたは元の配列は、この機能によって変更することにしたいので、あなたがそれinoutパラメータにする必要があります。

func loadUsers(_ users: inout [User] , _ tableView: UITableView) { 
    let usersRef = firebase.child("Users") 
    usersRef.observe(.value, with: { snapshot in 
     if snapshot.exists() { 
      users.removeAll() 
      ... 
} 

あなたは今もあなたがusersパラメータに渡すvar&を追加する必要があります。

+0

'inout'を使って私のアップデートを見てください。 – rmaddy

+0

私はクロージャの使用に気付かなかった。あなたが参照するリンクは、あなたがしなければならないことに対するより良い解決策です。 – rmaddy

関連する問題