我認爲你正在做比它需要這個更難。有了這樣定義的協議:
@protocol MyProtocol
@property (nonatomic, assign, getter = isLoading) BOOL loading;
@property (nonatomic, readonly) UIExpansionStyle expansionStyle;
@end
以下類符合:
class Conformer : MyProtocol {
var loading: Bool
var expansionStyle: UIExpansionStyle
init(loading: Bool, expansionStyle: UIExpansionStyle) {
self.loading = loading
self.expansionStyle = expansionStyle
}
}
,前綴布爾干將與is
是可可約定。因此,斯威夫特已經知道這件事,也不需要你做快速方面有什麼特別之處。
令人困惑的部分可能是Objective C屬性聲明的所有修飾符。我們一個接一個地看看他們。
nonatomic
在Swift中沒有等價物,這裏沒有什麼可做的。
assign
對於值類型是自動的,這裏也沒有什麼可做的。
getter = isLoading
是一個可可約定,斯威夫特理解並且不需要任何東西來完成這項工作。
readonly
you can在Swift中執行此操作(只需使用get{ }
語法),但這不是必需的。這是因爲你可以擴大協議制定的合同。 MyProtocol
要求有一個名爲expansionStyle
的屬性可以從中讀取,它的確如此不是表示不可能在實現該協議的類型中寫入該屬性,就像它沒有說你不能在同一類別上有其他屬性/方法。
有斯威夫特代碼,您可以發佈?你是否在類聲明中聲明瞭協議一致性('class myClass:Superclass,Protocol {// class code here})?你有橋接頭來導入SLExpandableTableView.h作爲Swift可以看到的Obj-C模塊嗎? – mc01