2017-06-23 100 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) 
      } 
     } 
    }