我有一个类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");
});
}
});
答案 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>?
类型的属性。换句话说,它是从Dictionary
到Int
的可选Int
映射。可选属性默认为nil
。由于您尚未初始化它,因此它是nil
。
var tagToIndex: Dictionary<Int,Int>?
通过删除?
使该属性非可选,并初始化它:
var tagToIndex: Dictionary<Int,Int> = [:]