Extensions May not contain Stored properties Extensions May not contain Stored properties ios ios

Extensions May not contain Stored properties


You can override the setter/getter so that it isn't a stored property and just forwards the set/get to the layer.

extension UIButton {    @IBInspectable var borderWidth : CGFloat {        set {            layer.borderWidth = newValue        }        get {            return layer.borderWidth        }    }}


Extensions cannot add stored properties. From the docs (Computed Properties section):

Note

Extensions can add new computed properties, but they cannot add stored properties, or add property observers to existing properties.

If you have a need for stored properties, you should create a subclass, like so:

class CustomButton : UIButton{    @IBInspectable var borderWidth : CGFloat        {        didSet{            layer.borderWidth = borderWidth        }    }}


In Swift, I'm importing a static library written in Objective-C. The protocol below, in that library, has a method and a property.

@class Message;@protocol LocalService @property (readonly) int action;- (Message *)getResponse:(Message *)request;@end

Trying to have a class conform to that protocol, delivers the messages below:

1-) Type 'ShowInitialViewLocalService' does not conform to protocol 'LocalService

2-) Extensions may not contain stored properties

The code provided below, fixes this issue:

import UIKitclass ShowInitialViewLocalService: NSObject{}extension ShowInitialViewLocalService : LocalService {        var action: Int32 {        get { return View.InitialView.rawValue }    }        func getResponse(_ request: Message) -> Message {        let response = Response(source: request.target, target: request.source, relatedView: View.InitialView.rawValue, action: request.action, data: request.data)        return response    }}

I hope this will help someone.