簡體   English   中英

在init中的閉包內快速調用self

[英]swift call self inside closure in init

convenience init(title: String!,
    datePickerMode: UIDatePickerMode,
    selectedDate: Date!,
    origin view: UIView!) {

        self.init(title: title,
                  datePickerMode: datePickerMode,
                  selectedDate: selectedDate,
                  doneBlock: { [weak self] (_, date , _) in
                                guard let sself = self else { return }
                                sself.done.next(date as! Date)
                    }
            ,
            cancel: { [weak self] (_) in
                                guard let sself = self else { return }
                                sself.cancel.next()
                    }
            ,
            origin: view)

但我得到編譯器錯誤:

'self' 在 self.init 調用之前使用

我解決了這個問題,首先用閉包 nil 初始化,然后立即設置。

convenience init(title: String!,
                 datePickerMode: UIDatePickerMode,
                 selectedDate: Date!,
                 origin view: UIView!) {

    self.init(title: title,
              datePickerMode: datePickerMode,
              selectedDate: selectedDate,
              doneBlock: nil,
              cancel: nil,
              origin: view)


    self.onActionSheetDone = { [weak self] (_, date , _) in
        guard let sself = self else { return }
        sself.done.next(date as! Date)
    }


    self.onActionSheetCancel = { [weak self] (_) in
        guard let sself = self else { return }
        sself.cancel.next()
    }

但我不明白以第一種方式這樣做有什么問題。 感謝您提供一些信息

在第一種情況下,您在self在閉包中使用 init 之前使用了self 這是不允許的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM