【问题标题】:iOS - Not able to access Static method of swift classiOS - 无法访问 swift 类的静态方法
【发布时间】:2016-06-14 23:29:36
【问题描述】:

我想访问 Objective-c 中的 Swift 代码

我用 swift 编写了一个包含静态方法的类。我想在目标 C 类中访问该静态方法。

这是类声明:

@objc class LocalizedResource: NSObject {

    /*!
    * @discussion This function will get localize string for key

    * @param key Localize key
    * @return String for locaized key
    * @code LocalizedResource.getStringForKey(key);
    */
    static func getStringForKey(key:String) -> String    {
        let frameworkBundle = NSBundle.mainBundle()
        let value = frameworkBundle.localizedStringForKey(key, value: nil, table: nil)
        return value;
    }
}

我已经为它做了以下设置:

  1. 产品模块名称:MyProject
  2. 定义模块:是
  3. 嵌入内容包含 Swift:是
  4. 安装 Objective-C 兼容性标头:是
  5. Objective-C 桥接头:$(SRCROOT)/MySources/SwiftBridgingHeader.h

我还在 Swift 类中的类声明之前添加了 @Obj

我在 .m 文件中导入了 MyProject-Swift.h,我想在其中访问该方法。

但是当我尝试访问它时,它不允许我访问该静态方法。

有人有解决办法吗?有什么遗漏吗?

感谢。

【问题讨论】:

  • 请显示类和静态方法的声明。
  • 您可能正在添加静态方法。请添加类功能..
  • 我已经用我在 Swift 文件中所做的类声明编辑了这个问题
  • 应该可以。在 Objective-C 中如何称呼它,确切的错误信息是什么?
  • @MartinR 我这样调用这个方法:errorMessage.text = LocalizedResource.getStringForKey(@"TIMED_OUT_ERROR"); 它给了我这个错误:Property 'getStringForKey' not found on object of type 'LocalizedResource'

标签: ios objective-c swift


【解决方案1】:

注意在 Swift 4 中,构建设置 swift 3 @objc inferencedefault,我们必须将函数显式标记为 @objc,否则它不会在 Swift 桥头中生成类函数。

【讨论】:

  • 这个答案是我想要的(:
【解决方案2】:

来自您的评论:

我是这样调用这个方法的:

errorMessage.text = LocalizedResource.getStringForKey(@"TIMED_OUT_ERROR");

在 Objective-C 中,“点语法”用于属性, 不是为了方法。正确的调用应该是

errorMessage.text = [LocalizedResource getStringForKey:@"TIMED_OUT_ERROR"];

【讨论】:

  • errorMessage.text = [LocalizedResource getStringForKey:@"TIMED_OUT_ERROR"]; 这是正确的行。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 2015-03-31
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多