我有以下代码:
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
行引发以下错误:无法分配给属性:'obj' 是不可变的
我不明白原因,因为 obj
被声明为 var
参数。因此,在我的理解中它应该是可变的。
有人可以解释一下原因并提供解决方法吗?
提前致谢!
最佳答案
我的猜测是 AnyObject 在技术上是一个协议(protocol)的问题
假设您正在 View 中工作,也许可以尝试以下操作:
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 中的 respondsToSelector 的更直接的答案 here
关于ios - Swift:无法在可变对象参数上设置属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36065557/