Swift 2.0 Method无法标记为@objc,因为参数的类型无法在Objective-C中表示

在我将Swift 1更新为Swift 2.0之后,我遇到了一个问题.

我在此代码的第一行收到以下错误

Method cannot be marked @objc because the type of the parameter cannot be represented in 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对Objective-C是不可见的.所以你的@objc func声明是非法的. Objective-C无法显示功能,因为它无法显示其参数.

您需要将类声明更改为如下所示:

class Person: NSObject {

……然后你当然可以在班级的实施中做出任何必要的进一步调整.但是这种改变会使你的@objc func声明合法化. (NSObject是Hashable,所以进行这种调整所需的工作量可能不是很大.)

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...