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

标签 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 行引发以下错误:无法分配给属性:'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/

相关文章:

ios - JSQMessagesView 动画行高变化的问题

ios - 导航工具栏在应用程序重新启动时隐藏

android - 迁移到 Cloud Endpoints Framework v2,iOS 客户端

swift - 如何在swift中离线缓存图像(没有互联网连接)?

swift - PFGeoPoint 不适用于 xcode7-ios9

swift - UITabBarController: UITabBarItem 更新它或重新加载它

iphone - 从不同的 View 呈现模态视图 Controller ? ModalViewController 被其他 View 隐藏

objective-c - 使用 NSRegularExpression 命名捕获组

ios - 样式 ActionSheet 的 UIAlertController 显示在状态栏下方

objective-c - 在应用程序邮件中预先添加文本 Objective-c