I'm trying to convert an existing Objective-C code into its Swift 3.0 equivalent.
I'm having trouble converting an Objective-C paradigm of defining the parent's declared getter (assessor) within its descendant; into its equivalent Swift 3.0's computed iVar paradigm.
Objective-C
Parent property:
@property(nonatomic, readonly) CGRect frameOfPresentedViewInContainerView;
Defining property within its descendant:
- (CGRect)frameOfPresentedViewInContainerView
{
CGRect containerViewBounds = self.containerView.bounds;
CGSize presentedViewContentSize = [self sizeForChildContentContainer:self.presentedViewController withParentContainerSize:containerViewBounds.size];
// The presented view extends presentedViewContentSize.height points from
// the bottom edge of the screen.
CGRect presentedViewControllerFrame = containerViewBounds;
presentedViewControllerFrame.size.height = presentedViewContentSize.height;
presentedViewControllerFrame.origin.y = CGRectGetMaxY(containerViewBounds) - presentedViewContentSize.height;
return presentedViewControllerFrame;
}
var frameOfPresentedViewInContainerView: CGRect { get }
When I attempt to define the value of 'frameOfPresentedViewInContainerView' via:
func frameOfPresentedViewInContainerView() -> CGRect {
let containerViewBounds = self.containerView?.bounds; // ...UIPresentationController - iOS 10
}
I get the following compiler error:
Method 'frameOfPresentedViewInContainerView()' with Objective-C selector 'frameOfPresentedViewInContainerView' conflicts with getter for 'frameOfPresentedViewInContainerView' from superclass 'UIPresentationController' with the same Objective-C selector
Which makes sense and is obvious.
So what's the best way to override a parent's computed (getter) variable?
Note: the parent class is Apple's canned UIPresentationController.
You override the var, just as given in the Swift interface:
override var frameOfPresentedViewInContainerView: CGRect {