iOS - 无法访问Swift类的静态方法

19

我希望能够在Objective-C中访问Swift代码。

我已经编写了一个包含静态方法的Swift类。我想在Objective-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。

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

有没有人对此有解决方案?是否有什么遗漏的东西?

谢谢。


3
请展示类和静态方法的声明。 - Martin R
你可能正在添加静态方法。请添加类方法。 - Johnykutty
我已经在Swift文件中编辑了包含类声明的问题。 - NiksT
应该可以。您在 Objective-C 中如何调用它,错误消息确切是什么? - Martin R
我按照如下方式调用这个方法:errorMessage.text = LocalizedResource.getStringForKey(@"TIMED_OUT_ERROR");然后它给了我这个错误:Property 'getStringForKey' not found on object of type 'LocalizedResource' - NiksT
2个回答

36

在Swift 4和构建设置swift 3 @objc inference中,我们必须明确标记函数为@objc,否则它将不会在Swift桥接头文件中生成类函数。


2
这个答案就是我想要的(: - oguzhan
你帮我节省了时间,谢谢!;-) - undefined

13

从您的评论中:

我按以下方式调用此方法:

errorMessage.text = LocalizedResource.getStringForKey(@"TIMED_OUT_ERROR");
在Objective-C中,“点语法”用于属性,而不是方法。正确的调用应该是:

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

errorMessage.text = [LocalizedResource getStringForKey:@"TIMED_OUT_ERROR"];这是正确的代码行。 再次感谢。 - NiksT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接