我正在使用框架在我的主项目中提供自定义UI元素。框架内的UI元素类有类属性。这些类中的每一个都扩展了常见的iOS类,并拥有自己的.xib文件。
例如:
open class BaseTableViewCell : UITableViewCell {
@IBOutlet public var title: UILabel!
open func setContentDimmed(_ dimmed:Bool) {
if dimmed {
self.title.alpha = 0.3 // < crashes with nil object
} else {
self.title.alpha = 1.0 // < crashes with nil object
}
}
问题在于,当我实例化BaseTableViewCell对象并调用setContentDimmed(true)func时,它会崩溃。我能改变的唯一方法就是改变
@IBOutlet public var title: UILabel!
可选择如下:
@IBOutlet public var title: UILabel?
然后我必须解开它或它的nil(即使它在框架中未声明为un unwrapped可选)
open class BaseTableViewCell : UITableViewCell {
@IBOutlet public var title: UILabel?
open func setContentDimmed(_ dimmed:Bool) {
if let titleLabel = self.title {
if dimmed {
titleLabel.alpha = 0.3 // < doesn't crash, works
} else {
titleLabel.alpha = 1.0 // < doesn't crash, works
}
}
}
在将BaseTableViewCell移动到我的框架之前,这是有效的。现在它总是一个可选的必须解开或它是零。有什么想法在这里发生吗?
我已经尝试了一切 - 我没有想法。
答案 0 :(得分:0)
为什么不做这样的事情?
@IBOutlet public var title: UILabel!{
didSet{
guard dimmed != nil { title.alpha = 1.0; return }
title.alpha = dimmed! ? 0.3 : 1.0
}
}
var dimmed: Bool? {
didSet{
guard title != nil else { return }
title.alpha = dimmed! ? 0.3 : 1.0
}
}
您很可能只是在属性设置之前调用setContentDimmed
。