我有以下代码:
func enableDelaysContentTouchesIncudlingSubviews(enable: Bool) {
self.setDelaysContentTouches(enable, forObject: self)
for obj: AnyObject in self.subviews {
self.setDelaysContentTouches(enable, forObject: obj)
}
}
private func setDelaysContentTouches(var value: Bool, var forObject obj: AnyObject) {
if obj.respondsToSelector("setDelaysContentTouches:") {
obj.delaysContentTouches = value
}
}
在第二个函数上,行obj.delaysContentTouches = value
会引发以下错误:Cannot assign to property: 'obj' is immutable
我不明白将obj
声明为var
参数后的原因。因此,我的理解应该是可变的。
有人可以解释一下原因并提供解决方法。
提前致谢!
答案 0 :(得分:0)
我的猜测是AnyObject在技术上是一个协议的问题
假设您正在视图中工作,可以尝试以下几点:
func enableDelaysContentTouchesIncudlingSubviews(enable: Bool) {
self.setDelaysContentTouches(enable, view: self)
self.subviews.forEach({setDelaysContentTouches(enable, view: $0)})
}
private func setDelaysContentTouches(enable: Bool, view: UIView) {
if let viewAsScrollview = view as? UIScrollView {
viewAsScrollview.delaysContentTouches = enable;
}
}
这是一种更快捷的做事方式,更清晰,并且不使用“respondsToSelector”
更多信息,可能是关于swift here中的respondsToSelector的更直接的答案