2015-07-28 50 views
0

我想在前面加上消息的另一個數組的數組,但我有錯誤:不能調用「插入」類型的參數列表「([(ModelMessageBridge)],atindex:INT)」

不能調用 '插入' 與類型的參數列表 '([(ModelMessageBridge)],atindex:整數)'

這是我的代碼:

var JSQmessages = [ModelMessageBridge]() 
//fill up the array here 

self.collectionView.performBatchUpdates({ 

    // indexPaths for earlier messages 
    let lastIdx = history.count - 1 
    var indexPaths: [AnyObject] = [] 
    for i in 0...lastIdx { 
      indexPaths.append(NSIndexPath(forItem: i, inSection: 0)) 
    } 

    //Convert the new messages in modelbridge 
    var messages = [ModelMessageBridge]() 

    for message in history { 
     messages.append(ModelMessageBridge(message: message)) 
    } 

    // insert messages and update data source 
    self.collectionView.insertItemsAtIndexPaths(indexPaths) 
    self.JSQmessages.insert(messages, atIndex: 0) //error here 

的兩個陣列具有相同的類型,所以我不會erstand爲什麼它不工作...

+0

用'insert'方法,你只能插入**一個**元素,而不是一個元素數組。 –

+0

@DánielNagy我實際上基於我的代碼[鏈接](https://github.com/jessesquires/JSQMessagesViewController/issues/781),它看起來像他們正在使用數組插入,不是嗎?如果沒有任何想法,我可以預先安排整個陣列? –

+0

@KaliAney查看'splice'方法。你也可以使用'self.JSQmessages = messages + self.JSQmessages'。 –

回答

1

可以使用splice定索引處插入新的元素:

self.JSQmessages.splice(messages, atIndex: 0) 

此外,您還可以大大有map簡化代碼:

self.collectionView.performBatchUpdates({ 
    let indexPaths = (0..<history.count).map { 
     NSIndexPath(forItem: $0, inSection: 0) 
    } 

    let messages = history.map { 
     ModelMessageBridge(message: $0) 
    } 

    self.JSQmessages.splice(messages, atIndex: 0) 
    self.collectionView.insertItemsAtIndexPaths(indexPaths) 
相關問題