我正在Swift类中的Obj-C库中实现协议,该协议将以下两个属性定义为:
@property (nonatomic, assign, getter = isLoading) BOOL loading;
@property (nonatomic, readonly) UIExpansionStyle expansionStyle;
尽管我不确定在Swift类中如何符合这些要求。
我看过Obj-C的示例,但还没有从中收集任何解决方案。我试过用相同的名称声明类变量,但这没有用。关于我将如何处理的任何建议?
PS,有问题的库是https://github.com/OliverLetterer/SLExpandableTableView
我认为您正在使这项工作变得比需要做的难。使用这样定义的协议:
@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
}
}
给布尔型getters加上前缀is
是可可约定,因此Swift已经知道了,不需要您在迅速方面做任何特殊的事情。
令人困惑的部分可能是目标C属性声明的所有修饰符。让我们一一介绍。
nonatomic
在Swift中没有等效功能,在这里无所事事。
assign
对于值类型是自动的,这里也不做任何事情。
getter = isLoading
是一种可可约定,Swift可以理解并且不需要您做什么才能完成此工作。
readonly
您可以在Swift中执行此操作(只需使用get{ }
语法即可),但这不是必需的。这是因为允许您扩展协议制定的合同。MyProtocol
需要有被称为属性expansionStyle
,可以被读取,它确实不说,它必须是不可能写入该属性的类型实现的协议,就像它没有说你不能有其他属性/同一类上的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句