我有一个家庭作业问题让我非常困惑。下面是一个问题的简要解释。
Imagine you are developing an application that stores contact information. The address book may contain many entity types e.g. Human being, a company or anything else that has a contact information.
- Now instead of explicitly checking every object type write a protocol that declares how an object must behave and successfully appear in your address book.
我的理解和回答这个问题的努力是,
在
@required
标签下构建一个协议(protocol),协议(protocol)中包含每种联系方式的通用方法。以及@optional下所有其他在不同联系人中不相似的方法(例如传真号码与公司相关但与个人无关......)。在运行时,您可以使用selector
检查对象是否响应任何给定的方法。 疑问:然而,这又是间接地显式检查对象类型,对吗?我的第二个想法是在 java 中使用类似
abstract class
的东西。这意味着从抽象类继承的类实现了自己的抽象方法。作为一个天真的 iOS 开发人员,我怎么不知道如何实现这个?而且我不确定这是否会解决我的问题。如果有人知道这一点,我想得到启发。
到目前为止已完成外部阅读,如果我正在寻找的答案在这些链接之一中,请告诉我。我会再读一遍以理解和解决这个问题:)。谢谢。
最佳答案
协议(protocol)与 Java 接口(interface)是一回事。它只是定义类应该支持哪些方法。这是一个清楚解释它的页面:http://www.otierney.net/objective-c.html#protocols
本质上,如果你想确保一个类有一个 phoneNumber
方法(访问 phoneNumber
属性)你会做这样的事情:
@protocol ContactProtocol
-(void) phoneNumber;
@end
@interface Person: NSObject <ContactProtocol> {
...
}
@interface Company: NSObject <ContactProtocol> {
...
}
然后在编译时(或在 xcode 4 上运行)它会告诉您是否忘记将 phoneNumber
方法添加到 Person
或 Company
类。
关于objective-c - Objective C 协议(protocol)的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617615/