当前位置: 首页 > 面试题库 >

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

孟茂学
2023-03-14
问题内容

将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显示此功能,因为无法向其显示其参数。

您需要更改您的类声明才能像这样开始:

class Person: NSObject {

…然后您可能当然必须在类的实现中进行任何必要的进一步调整。但是,这种更改会使您的@objc func声明合法。(NSObject 是可
哈希的,因此进行这种修改所需的工作量可能不是很大。)



 类似资料:
  • 问题内容: 听起来很荒谬,但是我无法修复这段代码: 无论我如何写闭包,我总是会遇到此错误: 无法使用类型为’ ‘ 的参数列表调用’filter ‘ 定义如下: 并且是Swift类(不继承自NSObject) 我在许多其他地方都使用了几乎相同的产品,而没有出现问题。有什么建议? 问题答案: 如果您不符合以下条件,则会收到该错误:

  • 我刚刚升级到spring-boot 2.1.3.release,由于这个新的类/方法,我不能拥有多个StreamsBuilderFactoryBean(只需要一个): 我得到这个错误: 我在想,也许使构造的bean成为一个主要的bean。任何帮助都超过感激! 编辑:我通过删除和来规避这个问题。因此,不起作用。

  • Driver.FindElement(By.CSSSelector(“[value='fomen']”))。Click(); driver.findElement(by.xpath(“//input[contains(@value,'male']”)).click(); Driver.FindElement(By.CSSSelector(“input[type='radio'][value='ma

  • 问题总结:我想传递一个带有类型参数(如

  • 问题内容: 当我编写代码以使用indexOf从数组中查找项目时,它向我显示了上述错误。这是我的代码:- 问题答案: 为了使用的,必须采取Equatable协议。只有采用此协议,列表才能将一个项目与其他项目进行比较以找到所需的索引

  • 我正在尝试从MySQL数据库中的表用户获取数据。使用下面的代码,我可以登录到数据库(不返回错误),但当我试图从表中读取数据时,它会显示警告(在这种情况下,我只是选择行来检查代码是否有效)。代码如下: 通过上面的代码,我得到以下结果: 警告:mysql_query()[function.mysql query]:在/home/adamjudk/public_html/airlinesimulator