【问题标题】:Swift 2.1: Property cannot be marked dynamic?Swift 2.1:属性不能标记为动态?
【发布时间】:2015-10-25 18:44:33
【问题描述】:

如何解决这个编译错误?

dynamic var users = [User]()

属性不能被标记为动态,因为它的类型不能在 Objective-C 中表示

我需要dynamic 以便某些视图控制器可以观察(通过KVO)users 并在users 更改时更新他们的视图。

【问题讨论】:

  • 非常清晰的错误信息。你不明白哪个词?
  • 我明白了。我不知道如何解决它。查看更新。
  • 用户是 NSObject 的子类吗?
  • @vikingosegundo 不,不是。我认为使它成为NSObject 的子类有效!谢谢! :-) 如果我没记错的话,在早期版本的 Swift 中,它不是 NSObject 的子类,即只有观察者必须是 NSObject 的子类。我更喜欢这种方式,因为我不明白为什么 User 需要成为 NSObject 的子类。
  • 我认为观察到的对象总是需要是 NSObject 的子类。从 2 月开始,这篇文章也提到了这一点。 blog.scottlogic.com/2015/02/11/swift-kvo-alternatives.html

标签: objective-c xcode swift swift2 key-value-observing


【解决方案1】:

正如错误中提到的那样

错误,不是@objc : NSObject

class A{

}

func something(){
    dynamic var a = [A]()
}

应该改为:

@objc class A:NSObject{

}

func something(){
    dynamic var a = [A]() //works, all good
}

【讨论】:

  • NSObject 继承时使用@objc 已过时。从NSObject 的任何继承都是隐含的
猜你喜欢
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
相关资源
最近更新 更多