代码之家  ›  专栏  ›  技术社区  ›  user1904273

从Objective-C类调用Swift方法的语法

  •  0
  • user1904273  · 技术社区  · 6 年前

    我试图调用从objective-c文件中用swift编写的实用程序文件中的一些代码。

    class ImageClass: NSObject {
    public func imageFromString(name: String?) -> UIImage? {
    //code to make image
    
    return image
    }
    }
    

     UIImage *myImage = [ImageClass imageFromString:@"test"];
    

    但是,这是一个错误:

    Use of undeclared identifier 'ImageClass'
    

    我知道可以从Objective-C文件访问实用程序文件,因为我使用共享实例调用了其他方法。

    有人能建议调用代码的正确方法吗?实际上,我不在乎它是一个类还是通过sharedInstance,我只需要能够调用它。

    根据@Charles Srstka的建议,我点击了 #import myapp.swift 文件,跳转到定义,并在标题中显示以下内容:

    - (UIImage * _Nullable)imageFromStringWithName:(NSString * _Nullable)name SWIFT_WARN_UNUSED_RESULT;
    

    因此,我尝试将WithName(我忘记了)添加到调用中,以便:

     UIImage *myImage = [ImageClass imageFromStringWithName:@"test"];
    

    No known class method for selector 'imageFromStringWithName:'
    
    2 回复  |  直到 6 年前
        1
  •  6
  •   Murod Mamadjanov Bilal Bakhrom    4 年前

    在swift 4.2和最新版本中

    1. 将此行添加到“*.m”文件:

      #import "YourProjectName-Swift.h"
      
    2. 在函数之前添加@objc:

      @objc public func imageFromString(name: String?) -> UIImage? {    
      //code to make the image
      return image
      }
      
    3. 将其称为Objective-C类:

      ImageClass *imgObject = [[ImageClass alloc] init];   
      UIImage *myImage = [imgObject imageFromStringWithName:@"test"];
      
        2
  •  1
  •   Charles Srstka    6 年前

    将此行添加到Objective-C文件:

    #import "YourProjectName-Swift.h"
    

    YourProjectName 用你的项目名称。这将使项目中所有与Objective-C兼容的Swift类对Objective-C代码可见。

    注意,您还需要添加 @objc func declataions,使方法对Objective-C可见。