扩展可能不包含存储的属性
我可以使用扩展在Swift中实现这个,而不需要inheritance? 我得到这个错误扩展可能不包含存储属性
extension UIButton { @IBInspectable var borderWidth : CGFloat { didSet{ layer.borderWidth = borderWidth } } }
你可以重写setter / getter,使它不是存储的属性,只是将set / get转发给图层。
extension UIButton { @IBInspectable var borderWidth : CGFloat { set { layer.borderWidth = newValue } get { return layer.borderWidth } } }
扩展不能添加存储的属性。 从文档 (计算属性部分):
注意
扩展可以添加新的计算属性,但不能添加存储的属性,或者将属性观察器添加到现有的属性。
如果你需要存储的属性,你应该创build一个子类,如下所示:
class CustomButton : UIButton { @IBInspectable var borderWidth : CGFloat { didSet{ layer.borderWidth = borderWidth } } }
我正在使用写入Objective-C的静态库。 这个库在Swift项目中使用。 这个协议有一个方法和属性。 我为协议添加了代码块。
@class Message; @protocol LocalService @property (readonly) int action; - (Message *)getResponse:(Message *)request; @end
所以当我需要遵守在静态库中编写Objective-C的协议。 我得到一个错误。
1-)types“ShowInitialViewLocalService”不符合协议“LocalService”
2-)扩展可能不包含存储的属性
所以我如何解决这个错误。
import UIKit class ShowInitialViewLocalService: NSObject{ } extension ShowInitialViewLocalService : LocalService { var action: Int32 { get { return View.InitialView.rawValue } } func getResponse(_ request: Message!) -> Message! { let response = Response.init(source: request.target, target: request.source, relatedView: View.InitialView.rawValue, action: request.action, data: request.data) return response } }
我希望这会帮助别人。