Вы звоните swipeFunc
, который обращается к sliderImage
до инициализации sliderImage
.
Вы должны переместить swipeFunc()
в конец вашего init
метода.
На самом деле, нет необходимости использовать неявно развернутые опции.Вы можете предотвратить сбои, используя необязательные:
let sliderView: UIView = UIImageView(frame: CGRect.zero)
let sliderImage: UIImageView = UIImageView(frame: CGRect.zero)
Поскольку у вас фактически есть два инициализатора, вам, вероятно, следует инициировать все в обоих:
let sliderView: UIView = UIImageView(frame: CGRect.zero)
let sliderImage: UIImageView = UIImageView(frame: CGRect.zero)
override init(frame: CGRect){
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
sliderView.backgroundColor = UIColor.green
sliderView.autoSetDimension(.height, toSize: screenSize.width / 6)
self.addSubview(sliderView)
sliderImage.backgroundColor = UIColor.clear
sliderImage.image = UIImage(named: "icons8-double_right_filled.png")
sliderImage.contentMode = .scaleAspectFit
sliderImage.autoSetDimension(.width, toSize: screenSize.width / 6)
sliderImage.autoSetDimension(.height, toSize: screenSize.width / 6)
self.addSubview(sliderImage)
swipeFunc()
}
Что касается обратного вызова, простообъявите свойство:
class TripView: UIView {
var onChange: (() -> Void)?
}
и при каждом вызове изменения:
onChange?()
В вашем контроллере вы можете:
var tripView: TripView = ...
tripView.onChange = {
// handle the event
}