[英]How To Solve No Type or Protocol Named Error In Xcode 7?
在我的情況下,問題是通過將委托的頭文件導入委托者的類.h文件引起的。 這似乎造成了一種惡性循環。 一旦我從委托人的.h文件中刪除了委托標題的import語句,錯誤就消失了。
簡而言之,如果您希望其他類使用您的協議,則必須在頭文件中聲明它,如下所示:
// MyClass.h
@protocol MyProtocol;
@interface MyClass : NSObject
@end
@protocol MyProtocol
- (void) doSomething: (MyClass*) m;
@end
在聲明它之后,你應該在實現文件中實現協議的方法,它應該符合這樣的協議:
// MyClass.m
@implementation MyClass <MyProtocol>
pragma mark - MyProtocol methods
- (void) doSomething: (MyClass *)m {
// method body
}
@end
完成這兩個步驟后,您就可以在任何所需的課程中使用協議。 例如,假設我們想要從其他類(例如OtherClass.h)將數據傳遞給MyClass。 您應該在OtherClass.ha屬性中聲明,以便我們可以引用MyClass並執行協議。 像這樣的東西:
// OtherClass.h
#import MyClass.h
@interface OtherClass : NSObject
@property (weak) id<MyProtocol> delegate;
@end
您不要忘記導入聲明協議的頭文件,否則Xcode將提示No Type或名為“MyProtocol”的協議
id<MyProtocol> delegate;
意味着您可以將任何符合MyProtocol
協議的對象( id
)設置為OtherClass
的委托( <MyProtocol>
) 現在,您可以從MyClass創建一個OtherClass對象,並將其delegate屬性設置為self。 像這樣:
// MyClass.m
- (void)viewDidLoad() {
OtherClass *otherClass = [[OtherClass alloc] init];
otherClass.delegate = self;
}
MyClass
符合MyProtocol
。 我希望這可以提供幫助。 如果您想了解有關協議的更多信息,可以參考以下兩個網站:
Ry的Objective-C教程 (這個很容易上手)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.