将Swift 1更新为Swift 2.0之后,我遇到了一个问题。
我在此代码的第一行收到以下错误:
无法将方法标记为@objc,因为无法在Objective-C中表示参数的类型
@objc func personsToFirstStep(persons: [Person]) { for person in persons { if !self.persons.contains(person) && person.id != userID { self.persons.append(person) } } collectionView.reloadData() collectionViewPlaceholder.hidden = true collectionView.hidden = false collectionGradientView.hidden = false }
这个Person类:
class Person: Hashable { var intID: Int = 0 var id: String = "" var name: String = "" var type: String = "" var hashValue: Int { return self.intID } init(id: String, name: String, type: String) { self.id = id self.intID = Int(id)! self.name = name self.type = type } } func ==(lhs: Person, rhs: Person) -> Bool { return lhs.intID == rhs.intID }
您已经很好地解释了问题所在:
class Person: Hashable {
人不是NSObject。但是Objective-C只能看到NSObject派生的类类型。因此,您的Person类型对Objective- C不可见。但是您的@objc func声明是针对需要一个Person数组的函数的-我们刚刚说过,Person- C不可见Person。因此,您的@objc func声明是非法的。无法向Objective-C显示此功能,因为无法向其显示其参数。
@objc func
您需要更改您的类声明才能像这样开始:
class Person: NSObject {
…然后您可能当然必须在类的实现中进行任何必要的进一步调整。但是,这种更改会使您的@objc func声明合法。(NSObject 是可 哈希的,因此进行这种修改所需的工作量可能不是很大。)