使用Swift show变量中的Objective-C类作为&lt; <error type =“”>&gt;。代码编译正常

时间:2015-07-29 01:47:23

标签: ios objective-c xcode swift

我正在Swift中在现有的Obj-C项目中编写我的新ViewControllers。坚持这个<<error type>>问题:

  1. 我的Swift代码中的Objective-C类显示为<<error type>>,而不是正确的类名。
  2. 我没有为Objective-C类方法和变量自动完成代码。我注意到当变量类型为<<error type>>
  3. 时会发生这种情况

    如果我拼写出确切的类名和类方法名,它们都可以正常编译并运行而不会出错。

    以下是我的班级声明:

    //  Localizer.h
    //  This is the Objective-C class
    #import <Foundation/Foundation.h>
    
    @interface Localizer : NSObject {
    }
    
    +(Localizer*)sharedInstance;
    +(NSString *)getLocalizedText:(NSString *)localConstant;
    @end
    

    这是.m文件:

    //
    //  Localizer.m
    //
    
    #import "Localizer.h"
    
    static Localizer *sharedInstance;
    
    @interface Localizer ()
    
    @end
    
    @implementation Localizer
    
    +(Localizer*)sharedInstance
    {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            sharedInstance = [[Localizer alloc] init];
        });
        return sharedInstance;
    }
    
    -(Localizer*)init
    {
        self = [super init];
        if (self)
        {
            //some logic after init     
        }
        return self;
    }
    
    +(NSString *)getLocalizedText:(NSString *)localConstant
    {
        NSString *foundVal = @“translated text”;
    
        return foundVal;
    }
    
    @end
    

    这是我的桥头文件:

    //
    //  Use this file to import your target's public headers that you would like to expose to Swift.
    //
    
    #import "Localizer.h"
    

    以下是我在.swift类中使用Localizer的方法,(已编辑)更详细

    @IBAction func btnNextPressed(sender: AnyObject) {
        let companyCodeStr = self.txtFldCompanyCode.text
    
        if companyCodeIsSane(companyCodeStr)
        {
            if let authController = Core.sharedInstance().authController
            {
                authController.lookupWithCompanyCode(companyCodeStr, completion: { (queryResult: CorpQuery!, coreResponse: CoreResponse!) -> Void in
    
                    if (coreResponse.error == nil)
                    {
                            // company disabled
                            if !queryResult.enabled && queryResult.status == "OK"
                            {
                                let alertTitle = ""
                                let alertMessage = Localizer.getLocalizedText("COMPANY_DISABLED_MSG")
                                let alertCancelText = Localizer.getLocalizedText("LABEL_OK_BTN");
    
                                let alertView = UIAlertView(title: alertTitle, message: alertMessage, delegate: self, cancelButtonTitle: alertCancelText)
                                alertView.show()
                            }
                            // Invalid company code
                            else if queryResult.status == "FAIL"
                            {
                                let alertTitle: String = Localizer.getLocalizedText("Wrong company code")
                                let alertMessage = Localizer.getLocalizedText("ERROR_INVALID_COMPANY_CODE")
                                let alertCancelText = Localizer.getLocalizedText("LABEL_CLOSE_BTN");
    
                                let alertView = UIAlertView(title: alertTitle, message: alertMessage, delegate: self, cancelButtonTitle: alertCancelText)
                                alertView.show()
                            }
                    }
                    else
                    {
                        println("company code lookup failure \(coreResponse.error)")
                    }
                })
            }
        }
    
    
    
    }
    

    在输入&#34; alert&#34;时,Xcode会自动显示命中: Xcode auto complete hint

    但他们都将变量类型显示为<<error type>>,而不是String或UIAlertView。我认为问题在于我如何使用Objective-C类&#34; Localizer.h&#34;。

    如果我输入let translator = Localizer.sharedInstance()Local,我就无法获得正确的自动完整代码: auto complete for 'alert'

    键入&#34; local ..&#34;我得到:auto complete for "local"

    我没有得到&#34; Localizer&#34;作为选择中的一个选项。

    如果我输入let alertTitle: String = Localizer.getLocalizedText("translate me"),我下次输入alertTitle时会收到正确的对象类型。
    显示为String的类型: shown correct type

    似乎Xcode或Swift编译器并不知道Localizer类方法返回一个String。

    我正在使用Xcode 6.4,我尝试删除/ DerivedData文件夹和&#34; com.apple.dt.Xcode&#34;文件。还尝试了各种清洁和重建&#34;项目。 尝试使用可选绑定/链接。

    我的努力都没有给我正确的对象类型和自动代码完成。

0 个答案:

没有答案