我可以在Swift中使用扩展实现此功能,而无需继承? 我得到这个错误 扩展可能不包含存储性能扩展可能不包含存储属性
extension UIButton
{
@IBInspectable var borderWidth : CGFloat
{
didSet{
layer.borderWidth = borderWidth
}
}
}
我可以在Swift中使用扩展实现此功能,而无需继承? 我得到这个错误 扩展可能不包含存储性能扩展可能不包含存储属性
extension UIButton
{
@IBInspectable var borderWidth : CGFloat
{
didSet{
layer.borderWidth = borderWidth
}
}
}
您可以覆盖的setter /吸气所以它不是一个存储的属性,只是前锋设置/进入图层。
extension UIButton {
@IBInspectable var borderWidth : CGFloat {
set {
layer.borderWidth = newValue
}
get {
return layer.borderWidth
}
}
}
的分机不能添加存储性能。从docs(计算机属性部分):
注
扩展可以添加新的计算性能,但它们不能添加存储 性能,或添加属性观察员现有的属性。
如果你有需要存储的性能,你应该创建一个子类,像这样:
class CustomButton : UIButton
{
@IBInspectable var borderWidth : CGFloat
{
didSet{
layer.borderWidth = borderWidth
}
}
}
我不想存储变量我想从接口生成器中更改layer.borderWidth –
dan的答案可能适用于您,尽管我担心UIButton可能在getter/setter之前未完全初始化调用。 – Alexander
在Swift中,我导入了一个用Objective-C编写的静态库。下面的协议在该库中有一个方法和一个属性。
@class Message;
@protocol LocalService
@property (readonly) int action;
- (Message *)getResponse:(Message *)request;
@end
试图有一个类符合该协议,提供下面的信息:
1-)键入 'ShowInitialViewLocalService' 不符合协议“本地服务
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(source: request.target, target: request.source, relatedView: View.InitialView.rawValue, action: request.action, data: request.data)
return response
}
}
我希望这会帮助别人。
这种技术很有效,但它不会更新xib/storyboard中的UI。 –
设置完成后请执行'setNeedsLayout()'。 –