具有可选属性的 UIView 扩展
UIView extension with optional properties
这是我现在的代码:
@objc protocol BaseView {
@objc optional var header: UILabel { get set }
@objc optional var footer: UILabel { get set }
}
class ViewWithHeader: UIView, BaseView {
@IBOutlet var header: UILabel!
}
class ViewWithFooter: UIView, BaseView {
@IBOutlet var footer: UILabel!
}
var view: BaseView!
if (header != nil) {
view = Bundle.main.loadNibNamed("ViewWithHeader", owner: self, option: nil)?.first as! ViewWithHeader
} else if (footer != nill) {
view = Bundle.main.loadNibNamed("ViewWithFooter", owner: self, option: nil)?.first as! ViewWithFooter
}
view.header?.text = "Header"
view.footer?.text = "Footer"
view.alpha // This line fails because BaseView has no member 'alpha'
我的问题是如何扩展 UIView 以包含可选的 header
和 footer
变量?也许我做的完全错了,在这种情况下,我会很感激正确方向的指示。
如果我对你的问题的理解正确,你需要让你的 BaseView
成为 UIView
的子class。然后在您的 class 定义中,您可以根据需要添加可选属性。代码看起来像这样
class BaseView: UIView {
var header: UILabel?
var footer: UILabel?
}
编辑
根据您在评论中的解释,我相信您需要这样的东西
class BaseView: UIView {
@IBOutlet var header: UILabel?
@IBOutlet var footer: UILabel?
}
class ViewWithHeader: BaseView {
}
class ViewWithFooter: BaseView {
}
var view: BaseView!
if (header != nil) {
view = Bundle.main.loadNibNamed("ViewWithHeader", owner: self, option: nil)?.first as! ViewWithHeader
} else if (footer != nil) {
view = Bundle.main.loadNibNamed("ViewWithFooter", owner: self, option: nil)?.first as! ViewWithFooter
}
view.header?.text = "Header"
view.footer?.text = "Footer"
view.alpha // This line fails because BaseView has no member 'alpha'
这是我现在的代码:
@objc protocol BaseView {
@objc optional var header: UILabel { get set }
@objc optional var footer: UILabel { get set }
}
class ViewWithHeader: UIView, BaseView {
@IBOutlet var header: UILabel!
}
class ViewWithFooter: UIView, BaseView {
@IBOutlet var footer: UILabel!
}
var view: BaseView!
if (header != nil) {
view = Bundle.main.loadNibNamed("ViewWithHeader", owner: self, option: nil)?.first as! ViewWithHeader
} else if (footer != nill) {
view = Bundle.main.loadNibNamed("ViewWithFooter", owner: self, option: nil)?.first as! ViewWithFooter
}
view.header?.text = "Header"
view.footer?.text = "Footer"
view.alpha // This line fails because BaseView has no member 'alpha'
我的问题是如何扩展 UIView 以包含可选的 header
和 footer
变量?也许我做的完全错了,在这种情况下,我会很感激正确方向的指示。
如果我对你的问题的理解正确,你需要让你的 BaseView
成为 UIView
的子class。然后在您的 class 定义中,您可以根据需要添加可选属性。代码看起来像这样
class BaseView: UIView {
var header: UILabel?
var footer: UILabel?
}
编辑
根据您在评论中的解释,我相信您需要这样的东西
class BaseView: UIView {
@IBOutlet var header: UILabel?
@IBOutlet var footer: UILabel?
}
class ViewWithHeader: BaseView {
}
class ViewWithFooter: BaseView {
}
var view: BaseView!
if (header != nil) {
view = Bundle.main.loadNibNamed("ViewWithHeader", owner: self, option: nil)?.first as! ViewWithHeader
} else if (footer != nil) {
view = Bundle.main.loadNibNamed("ViewWithFooter", owner: self, option: nil)?.first as! ViewWithFooter
}
view.header?.text = "Header"
view.footer?.text = "Footer"
view.alpha // This line fails because BaseView has no member 'alpha'