Swift:计算属性的默认初始值设定项

看来我不能使用可用于存储属性的默认初始值设定项方法给计算属性一个默认值。 这里有一个用例,我需要这个:

@IBDesignable public class MyRoundedCornersView: UIView { @IBInspectable var cornerRadius: CGFloat { get { return self.layer.cornerRadius } set { self.layer.cornerRadius = newValue } } } 

我想给cornerRadius一个默认值。 但以下不起作用(只是增加= 8.0 ):

 @IBDesignable public class MyRoundedCornersView: UIView { @IBInspectable var cornerRadius: CGFloat = 8.0 { get { return self.layer.cornerRadius } set { self.layer.cornerRadius = newValue } } } 

'(() -> () -> $T1) -> $T2' is not identical to 'Double'错误'(() -> () -> $T1) -> $T2' is not identical to 'Double' 。 我在这里查找了解如何做到这一点,但似乎苹果不支持计算属性的默认值。 至less我找不到任何东西。

那么我怎样才能确保我的财产有一个默认值? 这个线程说,在init方法中是不可能的 – 但即使如此,我想保留默认值在我的属性定义附近。 有没有人有一个想法?

将默认值设置为计算属性是没有意义的,因为它没有适当的值:

计算的属性,实际上并没有存储一个值。 相反,它们提供了一个getter和一个可选的setter来间接检索和设置其他属性和值。

也许你想要设置图层types的默认值,如:

 class Layer { // <- The type of layer var cornerRadius: CGFloat = 8.0 // ... } 

另一个解决scheme是使用像这样的存储的属性:

 var cornerRadius:CGFloat = 8.0 { didSet { self.layer.cornerRadius = self.cornerRadius } } 

编辑:这不保证layer.cornerRadius == self.cornerRadius,尤其是如果layer.cornerRadius直接设置

可以在init中初始化计算的属性,就像这样。

 class TestProperty { var b = 0 var a: Int { get { return b + 1 } set { b = newValue - 1 } } init(a: Int) { self.a = a } } 

但是可以为存储的属性b提供一个默认值,并从b检索a

计算属性存在的原因是,您可以根据其他属性计算(或更新)某些内容,并通过计算属性直接使用它。

我想知道为什么你想提供一个计算属性的默认值。