Swift:无法在可变对象参数上设置属性值

时间:2016-03-17 15:51:09

标签: ios objective-c swift

我有以下代码:

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参数后的原因。因此,我的理解应该是可变的。

有人可以解释一下原因并提供解决方法。

提前致谢!

1 个答案:

答案 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的更直接的答案