Swift中以下Objective-C代码的等价物是什么?
@property (nonatomic, assign, getter = isOpen) BOOL open;
具体来说,如何在Swift中声明一个变量来合成具有自定义名称的getter?
此外,您如何随后覆盖getter和setter的实现?
答案 0 :(得分:17)
你的假设很接近,但有些事情可以改变。我将尽力帮助您尽可能接近Objective-C版本。
首先,nonatomic
和assign
与swift无关。这让我们
@property (getter = isOpen) BOOL open;
由于swift中的属性只是实例变量,因此swift转换如下:
var open:Bool
虽然它具有与Objective-C版本相同的基本功能,但它缺少命名的getter(isOpen
)。不幸的是,没有直接翻译为swift(尚)。您可以使用自定义的getter和setter。
var open:Bool {
get {
// custom getter
}
set {
// custom setter
}
}
一个相当粗略的工作是使另一个函数字面上称为isOpen
,它将充当一个吸气剂。
func isOpen() -> Bool { return self.open }
总之,你所要求的只是略有可能,但希望在后期版本的swift中可以成为现实。
答案 1 :(得分:17)
<android.support.v7.widget.RecyclerView
android:id="@+id/drawer_recyclerview"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:choiceMode="singleChoice"
android:dividerHeight="0dp"
android:background="#ffff"
android:layout_height="400dp"
android:clipToPadding="false"
android:padding="8dp">
</android.support.v7.widget.RecyclerView>
导致生成此标头:
var open: Bool {
@objc(isOpen)
get {
// custom getter
}
set {
// custom setter
}
}
答案 2 :(得分:-1)
作为建议,对于二传手,您需要重复@objc
指令:
@objc( setOpen:) set { self.open = newValue }
不要遗忘半列。
一个特别的事情是,self.open
会调用设置程序/获取程序本身并产生无限循环。
在Obj-C中,您可以使用self->open
对其进行修复。快点怎么办?