2016-04-21 101 views
0

當我將單元格返回到if-else之外時,會遇到問題,它會給我一個「使用未解析的標識符單元格」的錯誤。這裏是我的代碼:if-else返回單元格

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    if let feedItem = feeds.objectAtIndex(UInt(indexPath.row)) as? FeedsDataModel { 
     if feedItem.media_url != "" { 
      let cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithImgCell", forIndexPath: indexPath) as! FeedsTableViewWithImageCell 
      cell.setupCellWithFeedItem() 
     } 
     else { 
      let cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithoutImgCell", forIndexPath: indexPath) as! FeedsTableViewWithoutImageCell 
      cell.setupCellWithFeedItem() 
     } 

     return cell 
    } 
} 
+0

是'feeds'真是一個可選的變量聲明或未知類型?如果在Interface Builder中設計表視圖,則數據源數組應該是一個特定類型的非可選對象,並且根本不需要可選綁定。 – vadian

回答

2

使用像

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

if let feedItem = feeds.objectAtIndex(UInt(indexPath.row)) as? FeedsDataModel { 
    if feedItem.media_url != "" { 
     let cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithImgCell", forIndexPath: indexPath) as! FeedsTableViewWithImageCell 
     cell.setupCellWithFeedItem() 
     return cell 
    } 
    else { 
     let cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithoutImgCell", forIndexPath: indexPath) as! FeedsTableViewWithoutImageCell 
     cell.setupCellWithFeedItem() 
     return cell 
    } 


} 
} 

更新

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell: FeedsTableViewWithImageCell 

if let feedItem = feeds.objectAtIndex(UInt(indexPath.row)) as? FeedsDataModel { 
    if feedItem.media_url != "" { 
     cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithImgCell", forIndexPath: indexPath) as! FeedsTableViewWithImageCell 
     cell.setupCellWithFeedItem() 

    } 
    else { 
     cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithoutImgCell", forIndexPath: indexPath) as! FeedsTableViewWithoutImageCell 
     cell.setupCellWithFeedItem() 

    } 


} 
    return cell 
} 

編輯&更新

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

if let feedItem = feeds.objectAtIndex(UInt(indexPath.row)) as? FeedsDataModel { 
    var cell:FeedsTableViewWithImageCell! 
    if feedItem.media_url != "" { 
     cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithImgCell", forIndexPath: indexPath) as! FeedsTableViewWithImageCell 
     cell.setupCellWithFeedItem() 
    } 
    else { 
     let cell1 = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithoutImgCell", forIndexPath: indexPath) as! FeedsTableViewWithoutImageCell 
     cell1.setupCellWithFeedItem() 
     return cell1 
    } 

    return cell 
} 
} 
+0

這給了我一個錯誤的「缺少返回函數」 –

+0

@SydneyLoteria - 嘗試更新的答案一次 –

+0

在其他條件下,它給了我一個錯誤「無法指定值的類型」FeedsTableWithoutImageCell「鍵入」FeedsTableWithImageCell「 –

0
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell: FeedsTableViewWithImageCell? 
    if let feedItem = feeds.objectAtIndex(UInt(indexPath.row)) as? FeedsDataModel { 
     if feedItem.media_url != "" { 
      cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithImgCell", forIndexPath: indexPath) as! FeedsTableViewWithImageCell 
      cell.setupCellWithFeedItem() 
     } 
     else { 
      cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithoutImgCell", forIndexPath: indexPath) as! FeedsTableViewWithoutImageCell 
      cell.setupCellWithFeedItem() 
     } 


    } 
return cell! 
} 
1

單元格必須是範圍內的全局變量。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    if let feedItem = feeds.objectAtIndex(UInt(indexPath.row)) as? FeedsDataModel { 
     var cell:FeedsTableViewWithImageCell! 
     if feedItem.media_url != "" { 
      cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithImgCell", forIndexPath: indexPath) as! FeedsTableViewWithImageCell 
      cell.setupCellWithFeedItem() 
     } 
     else { 
      cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithoutImgCell", forIndexPath: indexPath) as! FeedsTableViewWithoutImageCell 
      cell.setupCellWithFeedItem() 
     } 

     return cell 
    } 
} 
+0

這是行不通的,還有一個'FeedsTableViewWithoutImageCell'類型和細胞顯然應該是非可選的。 – vadian

+0

改變了我的答案解開變量,它應該工作 –

0

寫下面的代碼行。你的問題將得到解決。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell: UITableViewCell? 
    if let feedItem = feeds.objectAtIndex(UInt(indexPath.row)) as? FeedsDataModel { 
     if feedItem.media_url != "" { 
      cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithImgCell", forIndexPath: indexPath) as! FeedsTableViewWithImageCell 
      cell.setupCellWithFeedItem() 
     } 
     else { 
      cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithoutImgCell", forIndexPath: indexPath) as! FeedsTableViewWithoutImageCell 
      cell.setupCellWithFeedItem() 
     } 
    } 

    return cell! 
} 
0

cell變量if範圍內聲明。它不在這個範圍之外。你有兩個選擇如何解決它:

  1. 返回cell在同一範圍內

    if let feedItem = feeds.objectAtIndex(UInt(indexPath.row)) as? FeedsDataModel { 
        if feedItem.media_url != "" { 
         let cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithImgCell", forIndexPath: indexPath) as! FeedsTableViewWithImageCell 
         cell.setupCellWithFeedItem() 
         return cell 
        } 
        else { 
         let cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithoutImgCell", forIndexPath: indexPath) as! FeedsTableViewWithoutImageCell 
         cell.setupCellWithFeedItem() 
         return cell 
        } 
    } 
    
  2. if範圍

    var cell: FeedsTableViewWithImageCell? 
    if let feedItem = feeds.objectAtIndex(UInt(indexPath.row)) as? FeedsDataModel { 
        if feedItem.media_url != "" { 
         cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithImgCell", forIndexPath: indexPath) as! FeedsTableViewWithImageCell 
         cell.setupCellWithFeedItem() 
        } 
        else { 
         cell = tableView.dequeueReusableCellWithIdentifier("FeedsTableWithoutImgCell", forIndexPath: indexPath) as! FeedsTableViewWithoutImageCell 
         cell.setupCellWithFeedItem() 
        } 
    } 
    return cell