如何访问委托函数中的变量?

时间:2017-06-22 14:43:41

标签: ios swift delegates

我有一个类MyCell,它有一个委托和一个实例变量tagToIndex。我想在委托修改后打印这个变量。目前我的代码如下所示:

 class MyCell: UITableViewCell, YSSegmentedControlDelegate {

 var tagToIndex: Dictionary<Int,Int>?

    func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) {

  tagToIndex[actionButton.tag] = index

}


print(tagToIndex)
}

问题是代替函数(tagToIndex)中存在的willPressItemAt不是tagToIndex,而是var switchTapIndex: ((Int)->Void)? func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) { switchTapIndex?(index) } 是零。

我还尝试使用回调将索引发送回视图控制器。代码如下所示:

var switchTapAction : ((Bool)->Void)?
func switched(_ sender: UISwitch) {
    print("Switched: \(sender.isOn)")

    // send the Switch state in a "call back" to the view controller
    switchTapAction?(sender.isOn)
}

不幸的是,当我在一个单独的函数中打印它时,该值仍然返回“nil”。也许我没有完全理解回调是如何工作的,但我不明白我在做什么与在开关函数中使用回调有什么不同:

var table = document.getElementById("details");
document.getElementById("sel").addEventListener("change", function () {
   var val = this.value;
   table.classList.toggle("filter", val.length>0);
   Array.from(document.querySelectorAll('#details tbody tr.active')).forEach( function (elem) {
     elem.classList.remove("active");
   });
   if (val.length) {
       var rows = document.querySelectorAll('#details tbody tr[data-vendor="' + val + '"]');
       Array.from(rows).forEach( function (row){
         row.classList.add("active");
       });
   }
});

2 个答案:

答案 0 :(得分:0)

在这里,您可能会将tagToIndex设为nil,因为您没有初始化该变量。试试吧,

  func segmentedControl(_ segmentedControl: YSSegmentedControl, willPressItemAt index: Int) {
    if tagToIndex == nil {
    tagToIndex = Dictionary()
    }
      tagToIndex[actionButton.tag] = index

    }


    print(tagToIndex)
    }

答案 1 :(得分:0)

以下行将tagToIndex声明为Dictionary<Int, Int>?类型的属性。换句话说,它是从DictionaryInt的可选Int映射。可选属性默认为nil。由于您尚未初始化它,因此它是nil

var tagToIndex: Dictionary<Int,Int>?

通过删除?使该属性非可选,并初始化它:

var tagToIndex: Dictionary<Int,Int> = [:]