2017-01-26 6 views
-1

友達の連絡先とテーブルビューを作成しました。
各セルには、ボタンが付いています。
選択したフレンドの配列
に情報を挿入したいのです(配列によって、フレンドのリストにスライドアップするための別の小さなビューを作成しました)。
ボタンをもう一度使用した場合、
選択した友人の配列の友人情報を削除します。
配列に追加する方法を知っていますが、
ですが、インデックスを使用しないで配列 の特定の項目(NSObject)を消去する方法がわかりません。Swift3を使ってArray内の特定のNSObjectを削除する方法

私のソースコードは、あなたがインデックス位置であなたのオブジェクトのインデックス、その後removeアイテムを取得するためにindex(where:)を使用することができます

class FriendModel : NSObject { 
    dynamic var index : "" 
    dynamic var thumbnail : "" 
    dynamic var name : "" 

} 

とView Controllerクラスで、

var selectedList = [FriendModel]() 

@IBAction func SelectAct(_ sender: Any) { 

    let chooseBtn = sender as! UIButton 

    let indexPath = NSIndexPath(row: chooseBtn.tag, section:0) 
    let cell = tableView.cellForRow(at: indexPath as IndexPath) as! FriendsListSendCell 

    // when selected button is pushed 
    if chooseBtn.isSelected == true { 
     chooseBtn.isSelected = false 
     count = count! - 1 

     if self.count! < 1 { 
      self.windowShowUp = false 
      UIView.animate(withDuration: 0.1, delay: 0.1, options: [], animations:{self.selectedBoard.center.y += 80 }, completion: nil) 
      self.checkNumLabel.text = "" 
     }else{ 

     } 
    //////////////////////////here//////////////////////////// 
    //////////////////how to erase the FriendModel(NSObject) in selectedList. 

    } 
    //when the unselected button is pushed 
    else { 

     //instance for append the friend info 
     let friendInfo = FriendModel() 


     chooseBtn.isSelected = true 
     count = count! + 1 

     friendInfo.thumbnail = cell.thumbnail 
     friendInfo.name = cell.nameLabel.text! 

     //add friend info to selectedList 
     self.selectedList.append(friendInfo) 
     print("\(self.selectedList)") 



     if self.windowShowUp! == false{ 
      self.windowShowUp = true 
      UIView.animate(withDuration: 0.1, delay: 0.1, options: [], animations:{self.selectedBoard.center.y -= 80 }, completion: nil) 

     }else{ 

     } 

    } 
} 
+0

投稿を特定の質問で更新できますか? –

+0

@BenjaminLowry私はそれを編集しました!ありがとう – kimpro

+0

FriendInfoに一意の識別子も保存する必要があります。それ以外の場合は、@ MirekEのソリューション)を検索し、後で何か選択したリストで行うことはできません。 – muescha

答えて

1

を下回っています。

class FriendModel { 
    var index = "" 
    var thumbnail = "" 
    var name = "" 
} 

let fm0 = FriendModel() 
fm0.index = "100" 
fm0.thumbnail = "tell.png" 
fm0.name = "Phillips" 

let fm1 = FriendModel() 
fm1.index = "200" 
fm1.thumbnail = "ask.png" 
fm1.name = "Allen" 

var array = [FriendModel]() 
array.append(fm0) 
array.append(fm1) 

// The index below is an index of the array. Do not confuse with the FriendModel.index 
let index = array.index { 
    return $0.thumbnail == "ask.png" && $0.name == "Allen" 
} 
array.forEach { print($0.name) } 

print("Array index:", index ?? "n/a") 

array.remove(at: index!) 

array.forEach { print($0.name) } 
+0

あなたの解決に感謝します。しかし、あなたは例を与えることができますメソッドを使用する? FriendModel.thumbnali = "ask.png"とFriendModel.name = "Allen"のインデックスを確認したいのですか? – kimpro

+0

Ok、更新された回答を参照してください。 – MirekE

+0

ありがとう!あなたの助け! – kimpro

1

あなたはMirekEのソリューションを使用することもできますが、ここでは別の解決方法があります。

最初のステップは、FriendModelオブジェクトの一意の識別子がidのようなものであるかどうかを特定することです。あなたは、アレイと使用削除であなたの要素を見つけるために、繰り返しのご希望の形式を使用することができます。この時点で

override public func isEqual(object: AnyObject?) -> Bool { 
    let friend = object as? FriendModel 
    if self.id == friend?.id { return true } 
    return false 
} 

:それはNSObjectのであるから、このようなisEqual関数をオーバーライドして、モデルに続いて

、 。

関連する問題