从另一个 class - Swift 调用选择器 3

Call selector from nother class - Swift 3

我正在从 "Utils_class" 创建一个 UIbutton,然后 return 它到我的 "getBtsDetails" class。 我成功实现调用 "buttonAction" 函数实现到 "getBtsDetails",但随后它 return 出错

"Unexpectedly found nil while unwrapping an Optional value"

getBtsDetails :

let Utils_Class = Utils()
var labelY : Int = 90

override func viewDidLoad() {
    super.viewDidLoad()

    WS_Class.GetDiplomaSubject(id: Int(self.BTS_id)!) { number, responseObject, error in
        if((error) == nil) {

            #let's create an UIbutton from Utils_class which gonna call the buttonAction below
self.scrollview.addSubview(self.Utils_Class.createButton(text: "Calcul", buttonY:self.labelY+30))
            self.scrollview.contentSize.height = CGFloat(self.labelY+40)
        }
    }
}

@objc func buttonAction(_ sender:UIButton!)
{
    #the error occurs here
    print(self.Utils_Class.getTextFields(view : self.scrollview)/1)
}

还有我的第二个 class,Utils :

public func createButton(text: String!, buttonY: Int!) -> UIButton {
    helpClasses = GetBTSDetails.init()
    let button = UIButton(type: UIButtonType.system) as UIButton
    button.frame = CGRect(x:0, y:buttonY, width:self.screenWidth/5, height:15)
    button.backgroundColor = UIColor.lightGray
    button.setTitle(text, for: UIControlState.normal)
    button.tintColor = UIColor.black
    button.addTarget(btsClasse, action: #selector(btsClasse.buttonAction(_:)), for: .touchUpInside)

    return button
}

var btsClasse: GetBTSDetails!

因为你没有初始化它

var btsClasse: GetBTSDetails!

所以当目标运行时

button.addTarget(btsClasse, action: #selector(btsClasse.buttonAction(_:)),for: .touchUpInside

buttonAction 中的内容将为 nil ,因此您必须 linkbtsClasse 反对您从

中引用选择器的呈现实例

好的,我终于成功了,只需创建我的 class 的新实例并替换:

var btsClasse: GetBTSDetails!

来自

var btsClasse = GetBTSDetails()

这样,我的 class "GetBTSDetails",所有函数、变量都已经初始化,允许我调用 UIButton 操作。