我认为你正在做比它需要这个更难。有了这样定义的协议:
@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