iOS - 无法访问swift类

时间:2016-03-02 08:12:39

标签: ios objective-c swift

我想访问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 Bridging Header:$(SRCROOT)/MySources/SwiftBridgingHeader.h
  6. 此外,我在Swift课程中的类声明之前添加了 @Obj

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

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

    有人有解决方案吗?有什么遗失的吗?

    Thnaks。

2 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:7)

来自你的评论:

  

我将此方法称为:

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

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

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