2016-10-25 62 views
0

我在这里疯了。使用Swift调用Objective-C方法3

我想在StackOverflow和其他网站上的一些答案这里调用一个Swift中的Objective-c方法。 但我发现了一些错误初始化的方法...

#error : Cannot convert value of type '()' to specified type 'getEvents' 

是因为斯威夫特3的?我在这里做错了什么?

这里是我的全码:

getEvents.h

#import <Foundation/Foundation.h> 

@interface getEvents : NSString 

+(NSString *) objGetEvents:(NSString *)latitude andLon:(NSString *)longitude andRadius:(NSString *)radius andMeasure:(NSString *)measure; 

@end 

getEvents.m

#import "getEvents.h" 

@implementation getEvents 

+(NSString *) objGetEvents:(NSString *)latitude andLon:(NSString *)longitude andRadius:(NSString *)radius andMeasure:(NSString *)measure { 

    NSString *link = [[NSString alloc] initWithFormat: @"http://some.website/file.php?lat=%@&lon=%@&ms=%@&dist=%@", latitude, longitude, measure, radius]; 

    NSData *myData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[link stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]]]; 

    return [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding]; 

} 

@end 

ListEvents.swift

func getEvents() { 
    let getEventsObj:getEvents = getEvents() 
    // error: Cannot convert value of type '()' to specified type 'getEvents' 

    let jsonString = getEventsObj.objGetEvents(latitude, andLon: longitude, andRadius: searchRadius, andMeasure: searchMeasure) as NSString 
    // error: Static member 'objGetEvents' cannot be used on instance of type 'getEvents' 

    print(jsonString) 
} 

PS。我输入“getEvents.h”中拓桥接-Header.h


我想在这个问题规定的使用,因为NSData的雨燕上的Objective-C的NSData,并得到我的URL的内容: https://stackoverflow.com/questions/40194517/nsdatacontentsof-options-works-on-the-simulator-but-not-on-the-device

+0

为什么你ObjC类和斯威夫特功能具有相同的名称?为什么课程名称以小写字母开头? – user28434

+0

首先尝试将'getEvents'重命名为'GetEvents'。建议该类型以大写字母开头。我猜测有一个与该类型同名的方法至少是问题的一部分。 –

+1

如果你想扩展它,你不能继承NSString - 使用Cathegory。你看NSString不是一个类,它是一个抽象,可以在运行时有很多不同的实现。 – markov

回答

2

您声明了一个class函数,不需要创建实例。

您的代码应该是这样的:

func getEvents() { 
     let jsonString = getEvents.objGetEvents(latitude, andLon: longitude, andRadius: searchRadius, andMeasure: searchMeasure) as NSString 

     print(jsonString) 
    } 
+0

谢谢你,改变我的Swift函数名称并更改我的代码,因为你建议一切正常:) –