我嘗試使用lazy var,但它不起作用,所以我需要解決這個問題,因為“添加圖表”按鈕不起作用:
var addGraphButton: NSButton = {
let button = NSButton(title: "Add Graph", target: self, action: #selector (addGraph))
button.translatesAutoresizingMaskIntoConstraints = false
return button // 'self' refers to the method 'EquationController.self', which may be unexpected
}()

uj5u.com熱心網友回復:
在您提出的背景關系中,self指的是EquationController型別本身,而不是EquationController您想要的作為實體的物件。
即,self.performSelector(#selector(addGraph))最終會呼叫class func addGraph,而不是您的實體方法func addGraph。
要解決此問題,請創建變數lazy,這會將按鈕的實體化推遲到您第一次使用它的位置,此時初始化self完成。您不能self在閉包初始化的存盤屬性中參考該實體,除非您將其設為lazy。例如:
lazy var addGraphButton: NSButton = {
let button = NSButton(title: "Add Graph", target: self, action: #selector(addGraph))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
你說:
我嘗試使用lazy var,但沒有用
這是正確的解決方案。您沒有分享您的addGraph實作,但請確保添加@objc限定符。例如,您通常會定義采取一個引數的操作:
@objc func addGraph(_ sender: Any) { ... }
進而:
lazy var addGraphButton: NSButton = {
let button = NSButton(title: "Add Graph", target: self, action: #selector(addGraph(_:)))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/466536.html
