Swift 2.0 Method cannot be marked @objc because the type of the parameter cannot be represented in Objective-C

后端 未结 3 992
夕颜
夕颜 2020-12-09 15:14

After I have updated Swift 1 to Swift 2.0 I have an issue.

I am getting the following error on the first line of this code:

Method cannot be m

相关标签:
3条回答
  • 2020-12-09 15:51

    I was getting this because I declared a class Notification of my own and it was messing with Foundation's Notification class.

    @objc func playerItemDidReachEnd(notification: Notification) {...}
    

    So I changed it to Foundation.Notification

    @objc func playerItemDidReachEnd(notification: Foundation.Notification) {...}
    
    0 讨论(0)
  • 2020-12-09 15:52

    With this less informations I can only try to suggest you to put this before Person declaration.

    @objc(Person)
    class Person {
    ...
    }
    
    0 讨论(0)
  • 2020-12-09 16:03

    You have very nicely explained the problem yourself:

    class Person: Hashable {
    

    Person is not an NSObject. But only an NSObject-derived class type can be seen by Objective-C. Therefore your Person type is invisible to Objective-C. But your @objc func declaration is for a function that takes an array of Person — and we have just said that Person is invisible to Objective-C. So your @objc func declaration is illegal. Objective-C cannot be shown this function, because it cannot be shown its parameter.

    You would need to change your class declaration to start like this:

    class Person: NSObject {
    

    ...and then you might of course have to make any necessary further adjustments in the class's implementation. But that change would make your @objc func declaration legal. (NSObject is Hashable, so the amount of work needed to make this adaptation might not be very great.)

    0 讨论(0)
提交回复
热议问题