我正在Swift中实现一个Circle类(UIView的子类),它根据在init(frame: CGRect)中传递的框架在初始化器中设置radius,如下所示:
override init(frame: CGRect)
{
radius = frame.width/2.0
super.init(frame: frame)
}我还想确保在从Interface实例化圆的情况下,所以我还实现了'required init(编码器aDecoder: NSCoder)‘(这是Xcode强迫我做的)。
如何检索以某种方式包含在frame中的视图的aDecoder属性。我想要达到的基本目标如下:
required init(coder aDecoder: NSCoder)
{
var theFrame = aDecoder.someHowRetrieveTheFramePropertyOfTheView // how can I achieve this?
radius = theFrame.width/2.0
super.init(coder: aDecoder)
}发布于 2014-10-12 09:24:21
您可以在super.init()设置帧后计算半径
required init(coder aDecoder: NSCoder)
{
radius = 0 // Must be initialized before calling super.init()
super.init(coder: aDecoder)
radius = frame.width/2.0
}发布于 2014-10-12 12:02:50
马丁的答案是正确的。(投票)。您可能能够找到基类编码框架值并提取它的方式,但这是脆弱的。(它依赖于基类实现的私有细节,这可能会在将来更改和破坏应用程序。)不要开发依赖于其他类或基类的非公开实现细节的代码。这是一个未来的错误,就等着发生。
initWithCoder中的模式是首先调用Super以获取祖先类的值,然后提取自定义类的值。
当您这样做时,祖先类已经为您设置了视图的框架,您只需使用它即可。
https://stackoverflow.com/questions/26323415
复制相似问题