如何从 objective c 调用 swift 方法

How to call swift method from objective c

我在 swift 中使用 xib 文件创建了自定义对话框 现在我想使用 objective c 文件中的那个对话框 我可以显示对话框,但无法收听按钮

的点击事件

我的Swift代码就像

public class CustomVerificationDialog:UIView,UITextFieldDelegate
{
     ///Othere stuffs
      var onClickRightButton : ((_ text1:String , _ text2:String ) -> Void)? = nil //This method is called when button is clicked

     @IBAction func onClickBtnRight(_ sender: Any)
        {
            if self.onClickRightButton != nil
            {
                self.onClickRightButton!(editTextOne.text ?? "",editTextTwo.text ?? "")
            }

        }
 }

现在我可以在 swift 中获取点击事件

dialogForVerification.onClickRightButton =
            { (text1:String,text2:String) in
                }

但是我不知道怎么听 objective c

CustomVerificationDialog *dialogVerification =  [CustomVerificationDialog showCustomDialog];
???

你可以试试

[dialogVerification setOnClickRightButton:^(NSString * _Nonnull text1 , NSString * _Nonnull text2 ) {

}];

这是一个Demo

为了访问 swift class 及其在 objective-c 文件中的 methods/properties,您需要用 @objc 标记 class/method/property。然后您需要在 objective-c 文件中导入 "TargetName-Swift.h" 以便访问 objective-c 文件中的 swift 代码。这是有望解决您问题的代码片段:

将您的 swift class 替换为:

    @objc public class CustomVerificationDialog:UIView,UITextFieldDelegate

    {

        @objc var onClickRightButton : ((_ text1:String , _ text2:String ) -> Void)? = nil //This method is called when button is clicked

        @IBAction func onClickBtnRight(_ sender: Any)
        {
           if self.onClickRightButton != nil
           {
           self.onClickRightButton!(editTextOne.text ?? "",editTextTwo.text ?? "")
           }

        }
        //other code goes here
    }

并在您的 objective-c 文件中(即 viewController)

#import "YourTargetName-Swift.h"

...................
................
CustomVerificationDialog *dialogVerification =  [CustomVerificationDialog showCustomDialog];
[dialogVerification setOnClickRightButton:^(NSString * _Nonnull text1 , NSString * _Nonnull text2 ) {

}];
// other code here
.................
..................