Extensions May not contain Stored properties

前端 未结 3 1745
后悔当初
后悔当初 2020-12-24 05:30

Can I implement this in Swift with Extensions without the need to inheritance?. I get this error Extensions May not contain Stored properties

extension UIB         


        
相关标签:
3条回答
  • 2020-12-24 05:57

    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
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-24 05:59

    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
            }
        }
    
    }
    
    0 讨论(0)
  • 2020-12-24 06:16

    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 UIKit
    
    class 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.

    0 讨论(0)
提交回复
热议问题