【问题标题】:I get a swift "run before self" error [duplicate]我得到一个快速的“在自我之前运行”错误[重复]
【发布时间】:2016-10-08 21:22:06
【问题描述】:

我得到一个“不能在属性初始化器中使用实例成员'外观';属性初始化器在'self'可用之前运行”。请不要建议从代码中删除外观,这是行不通的。我还添加了一个 self.appearence.kcirclebackround 并得到了错误。

这里是设置 kCircleHeightBackground cgfloat 的地方 `open class SCLAlertView: UIViewController {

public struct SCLAppearance {
    let kDefaultShadowOpacity: CGFloat
    let kCircleHeightBackground: CGFloat 
    let kCircleTopPosition: CGFloat
    let kCircleBackgroundTopPosition: CGFloat
    let kCircleHeight: CGFloat
    let kCircleIconHeight: CGFloat
    let kTitleTop:CGFloat
    let kTitleHeight:CGFloat
    let kWindowWidth: CGFloat
    var kWindowHeight: CGFloat
    var kTextHeight: CGFloat
    let kTextFieldHeight: CGFloat
    let kTextViewdHeight: CGFloat
    let kButtonHeight: CGFloat
    let contentViewColor: UIColor
    let contentViewBorderColor: UIColor
    let titleColor: UIColor

`

然后我在“appearance.kCircleHeightBackground”处收到错误

var appearance: SCLAppearance!

// UI Colour
var viewColor = UIColor()

// UI Options
open var iconTintColor: UIColor?
open var customSubview : UIView?



// Members declaration
var baseView = UIView()
var labelTitle = UILabel()
var viewText = UITextView()
var contentView = UIView()
// "I get an error here at appearance.kCircleHeightBackground"__________var circleBG = UIView(frame:CGRect(x:0, y:0, width: appearance.kCircleHeightBackground, height: appearance.kCircleHeightBackground))
var circleView = UIView()
var circleIconView : UIView?
var duration: TimeInterval!
var durationStatusTimer: Timer!
var durationTimer: Timer!
var dismissBlock : DismissBlock?
fileprivate var inputs = [UITextField]()
fileprivate var input = [UITextView]()
internal var buttons = [SCLButton]()
fileprivate var selfReference: SCLAlertView?

public init(appearance: SCLAppearance) {
    self.appearance = appearance
    super.init(nibName:nil, bundle:nil)
    setup()
}

Image of error i get

【问题讨论】:

    标签: ios iphone swift swift3


    【解决方案1】:

    正如错误所提到的,在初始化程序中设置之前,您无法使用 appearance 属性。在初始化程序运行之前评估您的属性,因此您唯一的选择是将所需的 circleBG 视图自定义移动到初始化程序中,例如您的 setup()-method。

    【讨论】:

    • 这是一种选择,但不是唯一一种。
    • @MartinR 哦,有趣!你能详细说明一下吗?
    • @MartinR 刚刚阅读了副本,不知道在这种情况下使用惰性可以解决问题。酷!
    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多