@objc protocol Speaker { func Speak() optional func TellJoke() }
它说如果你想有一个可选方法的协议,你必须使用@objc标记前缀协议(即使你的类不与Objective-C进行互操作).
然后,它显示了实现协议的示例:
class Vicki: Speaker { func Speak() { println("Hello,I am Vicki!") } func TellJoke() { println("Q: What did Sushi A say to Sushi B?") } }
我在我的xcode操场上尝试了上面的代码,但是我得到了编译器错误“类型Vicki不符合协议扬声器”.
Xcode还会弹出一个修复文本,它说“候选不是”@objc’,但协议需要它“.
我现在完全感到困惑,本教程根本没有提到这个错误.有人可以向我解释这一切,使我清楚吗?谢谢!
解决方法
class Vicki: NSObject,Speaker {
class Vicki: Speaker { @objc func Speak() { print("Hello,I am Vicki!") } @objc func TellJoke() { print("Q: What did Sushi A say to Sushi B?") } }
更新:从苹果的Swift Language Documentation
Optional protocol requirements can only be specified if your protocol is marked with the @objc attribute.
…
Note also that @objc protocols can be adopted only by classes,and not by structures or enumerations. If you mark your protocol as @objc in order to specify optional requirements,you will only be able to apply that protocol to class types.
原文地址:https://www.jb51.cc/iOS/335919.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。