我有一个以以下方式定义的小协议:
import UIKit
protocol HasMeterAnimation {
func animateMeter(scrollableView: UIScrollView)
}
它的实现需要使用IBOutlets:
func animateMeter(scrollableView: UIScrollView) {
let maxYPosTableview = scrollableView.frame.height + scrollableView.frame.origin.y
let progressBarRect = self.progressBar.frame
let rectOfProgressBarInParentView = self.convert(progressBarRect, to: scrollableView.superview)
let maxYPosMeter = rectOfProgressBarInParentView.origin.y + progressBarRect.height
if maxYPosTableview > maxYPosMeter {
if progressBar.isHidden == false {
progressBar.animateProgressBar()
model.shouldMeterAnimate = false
}
}
}
我想知道是否可以使用IBOutlets在协议扩展中编写此实现的方法...
protocol HasMeterAnimation {
@IBOutlet var progressBar:AnimatedProgressBar! { get set }
var model: ListItem! { get set }
func animateMeter(scrollableView: UIScrollView)
}
extension HasMeterAnimation {
func animateMeter(scrollableView: UIScrollView) {
let maxYPosTableview = scrollableView.frame.height + scrollableView.frame.origin.y
let progressBarRect = self.progressBar.frame
let rectOfProgressBarInParentView = self.convert(progressBarRect, to: scrollableView.superview)
let maxYPosMeter = rectOfProgressBarInParentView.origin.y + progressBarRect.height
if maxYPosTableview > maxYPosMeter {
if progressBar.isHidden == false {
progressBar.animateProgressBar()
model.shouldMeterAnimate = false
}
}
}
我已经尝试了很多方法,但是一直在给我错误。谢谢
IBOutlet只是一个关键字,用于让接口构建器知道您要引用类中的接口构建器的对象,例如在ViewController,View等中。在任何其他上下文中,IBOutlet都没有任何意义。在协议中定义属性时,也不要将其标记为强制展开。当您没有将属性明确标记为可选属性时,则该属性必须在运行时具有值,否则您将无法编译代码。接口构建器将其出口标记为未包装,因为它们在编译时没有值,并且在运行时解析。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句