【发布时间】:2021-09-13 06:35:11
【问题描述】:
当我使用 let UISwitch 替换 lazy var UISwitch in UITableViewCell 像这样:
let trigger: UISwitch = {
let sw = UISwitch()
sw.addTarget(self, action: #selector(onTriggerChanged(sender:)), for: .valueChanged)
return sw
}()
我发现函数onTriggerChanged 从未调用过,所以我做了一些测试,这是我的测试代码:
class TestCell: UITableViewCell {
lazy var trigger: UISwitch = {
let sw = UISwitch()
print("trigger \(self)")
sw.addTarget(self, action: #selector(onTriggerChanged(sender:)), for: .valueChanged)
return sw
}()
var trigger2: UISwitch = {
let sw = UISwitch()
print("trigger2 \(self)")
sw.addTarget(self, action: #selector(onTriggerChanged(sender:)), for: .valueChanged)
return sw
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
let trigger3: UISwitch = {
let sw = UISwitch()
print("trigger3 \(self)")
sw.addTarget(self, action: #selector(onTriggerChanged(sender:)), for: .valueChanged)
return sw
}()
contentView.addSubview(trigger)
contentView.addSubview(trigger2)
contentView.addSubview(trigger3)
}
}
打印消息是:
trigger <TestCell: 0x......>
trigger2 (Function)
trigger3 <TestCell: 0x......>
并且未调用 trigger2 valueChanged 事件。
那么触发器/触发器2/触发器3中的self有什么区别
【问题讨论】:
-
我收到一条警告,上面写着“字符串插值会为函数值生成调试描述;您的意思是明确说明吗?”在 trigger2 中,这很清楚
self的含义。你没有得到一个吗?