gpt4 book ai didi

Swift 2.0 Method 不能被标记为@objc 因为参数的类型不能在 Objective-C 中表示

转载 作者:行者123 更新时间:2023-11-28 07:53:56 24 4
gpt4 key购买 nike

在我将 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 {

Person 不是 NSObject。但是 Objective-C 只能看到 NSObject 派生的类类型。因此,您的 Person 类型对 Objective-C 是不可见的。但是你的 @objc func 声明是针对一个接受 Person 数组的函数的——我们刚刚说过 Person 对 Objective-C 是不可见的。所以你的 @objc func 声明是非法的。 Objective-C 无法显示此函数,因为无法显示其参数。

您需要更改您的类声明以这样开始:

class Person: NSObject {

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

关于Swift 2.0 Method 不能被标记为@objc 因为参数的类型不能在 Objective-C 中表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48866026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com