2015-08-26 8 views
1

Я пытаюсь создать функцию, которая может удалять элементы, такие как следующие:Удалить конкретную PFObject из PFObject массива

var array = [23,36,12,45,52,63] 
removeItem(12,array) 
result : array = [23,36,45,52,63] 

Я пытаюсь реализовать это для PFObject, но я получаю сообщение об ошибке:

public func removeObjectFromArray(user:PFObject,array:[PFObject]) -> [PFObject]{ 

    for var i = 0;i < array.count ; i++ { 
     if array[i].objectId == user.objectId{ 
      array.removeAtIndex(i) 
      return array 
     } 
    } 
} 

ошибка, что я получаю:

Immutable type of [PFObject] only ha mutating members named 'removeAtIndex' 

Любое решение для этого?

Спасибо

+0

NSMutableArray обеспечивает это https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/#//apple_ref/occ/instm/NSMutableArray/removeObjectsInArray: – danh

ответ

0

Попробуйте сделать это:

public func removeObjectFromArray(user: PFObject, array: [PFObject]) -> [PFObject] { 
    var a = array 
    for i in 0..<a.count { 
     if a[i].objectId == user.objectId { 
      a.removeAtIndex(i) 
      return a 
     } 
    } 
    return a 
} 

Проблема заключается в том, что вы пытаетесь изменить аргумент функции.

Вы также можете сделать параметр функции изменяемого путем добавления var ключевого слова, здесь связан вопрос: Swift make method parameter mutable?

+0

Это приведет к печали, поскольку индекс конца изменяется во время работы цикла. – danh

+0

@danh работает хорошо, так как я не буду продолжать следующую итерацию после удаления объекта. –

0

Я не скор разработчиком, но я никогда не хотел, чтобы удалить объекты в цикле. Вот как я бы это сделать (псевдо-код):

var a = empty array 
for i in (0 -> length of array) { 
    if array[i].objectId != user.objectId { 
     a.addObject(array[i]) 
    } 
} 
return a 
Смежные вопросы