2017-06-23 68 views
0

形成範圍我有一個我想與有附加價值的for循環的類。斯威夫特3:致命錯誤:無法與UPPERBOUND <下界

這是我的課:

public class Expandable { 
    public var name: String 
    public var id:Int 

    init(name: String, id:Int) { 
     self.name = name 
     self.id = id 
    } 

我可以手動添加這樣的:

let a = [Expandable(name:"aaa", id: 12)] 

但是,當我嘗試用for循環,它不會在所有的工作。

for allin in items{ 
     sidebarMenuItem?.append(Expandable(name: allin["Code"] as! String, id: allin["Id"] as! Int)) 
       } 

Items數據的作品完美,但sidebarMenuItem越來越Optional(MyProjectName.Expandable)值當我打印出來。我是新來的班級。那麼你能幫助我爲這種情況做些什麼嗎?

UPDATE:

我意識到,我得到了DATAS很好,但我得到一個錯誤到expandCell功能:

fatal error: Can't form Range with upperBound < lowerBound

我expandCell功能:

private func expandCell(tableView: UITableView, index: Int) { 
    // Expand Cell (add ExpansionCells 
    if let expansions = sideBarData?[index]?.expandable { 
     for i in 1...expansions.count { 
      sideBarData?.insert(nil, at: index + i) 
      tableView.insertRows(at: [NSIndexPath(row: index + i, section: 0) as IndexPath] , with: .top) 
     } 
    } 
} 
+0

'sidebarMenuItem'顯然是一個可選的(或者甚至是'[Expandable?]'')類型,你期望什麼?在許多情況下,將數組聲明爲可選項是無意義的。 – vadian

+0

@vadian我做了可選的,因爲我在可擴展的tableview列表中使用這個類。如果它是空的,我不會添加新的可擴展列表。這是我的目標。 – winnervswinner

+0

**不要**將數據源數組聲明爲可選項,並且**不要**在數據源數組中使用可選類型。或者底層表視圖也是可選的? – vadian

回答

1

sidebarMenuItem是因爲你已經聲明它是可選的。嘗試這個。

var sidebarMenuItem = [Expandable]() 

for allin in items{ 
    sidebarMenuItem.append(Expandable(name: allin["Code"] as! String, id: allin["Id"] as! Int)) 
} 
+0

它也不起作用。現在我得到致命的錯誤:無法形成與upperBound winnervswinner

0

我不確定擴展結構如何。但我猜測它的一些細胞則可能是您的擴展數爲0。這就是爲什麼它給這個錯誤,當你開始索引爲1和結束索引爲0

0

試試這個:

private func expandCell(tableView: UITableView, index: Int) { 
     // Expand Cell (add ExpansionCells 
     if let expansions = sideBarData?[index]?.expandable { 
      //0 because your first item starts at 0 
      for i in 0...expansions.count { 
       sideBarData?.insert(nil, at: index + i) 
       tableView.insertRows(at: [NSIndexPath(row: index + i, section: 0) as IndexPath] , with: .top) 
      } 
     } 
    }