2017-01-26 14 views
-1

Я сделал табличный просмотр с контактной информацией с друзьями.
И в каждой ячейке есть кнопка, если она коснулась,
Я хочу вставить информацию в выбранный массив друзей
(по массиву я сделал еще один небольшой снимок, чтобы открыть список друзей).
Но если пользователь кнопка еще одна,
Я хочу удалить друга Info в выбранном массиве друзей.
Я знаю, как добавить к массиву
, но я не знаю, как удалить конкретный элемент (NSObject) в массиве , не используя индекс.Как удалить определенный NSObject в массиве с помощью Swift3

мой исходный код ниже

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

} 

и В видовом классе контроллера,

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

Вы можете использовать index(where:), чтобы получить индекс вашего объекта, а затем remove элемент в позиции индекса.

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

Хорошо, см. обновленный ответ. – MirekE

+0

спасибо! ваша помощь! – kimpro

1

Вы можете использовать решение MirekE, которое будет работать, но это альтернативное решение.

Первым шагом будет идентификация того, что уникальный идентификатор объекта FriendModel является таким, как свойство id.

Тогда на вашей модели, так как она является NSObject, переопределить isEqual функцию следующим образом:

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

На данный момент вы можете использовать нужную форму итерации, чтобы найти свой элемент в массиве и удалить пользователя ,

 Смежные вопросы

  • Нет связанных вопросов^_^