我正在Swift中在现有的Obj-C项目中编写我的新ViewControllers。坚持这个<<error type>>
问题:
<<error type>>
,而不是正确的类名。<<error type>>
如果我拼写出确切的类名和类方法名,它们都可以正常编译并运行而不会出错。
以下是我的班级声明:
// 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会自动显示命中:
但他们都将变量类型显示为<<error type>>
,而不是String或UIAlertView。我认为问题在于我如何使用Objective-C类&#34; Localizer.h&#34;。
如果我输入let translator = Localizer.sharedInstance()
或Local
,我就无法获得正确的自动完整代码:
我没有得到&#34; Localizer&#34;作为选择中的一个选项。
如果我输入let alertTitle: String = Localizer.getLocalizedText("translate me")
,我下次输入alertTitle
时会收到正确的对象类型。
显示为String的类型:
似乎Xcode或Swift编译器并不知道Localizer类方法返回一个String。
我正在使用Xcode 6.4,我尝试删除/ DerivedData文件夹和&#34; com.apple.dt.Xcode&#34;文件。还尝试了各种清洁和重建&#34;项目。 尝试使用可选绑定/链接。
我的努力都没有给我正确的对象类型和自动代码完成。