2016-10-25 6 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 :

여기 내 전체 코드입니다. 내가 확장-브리징-header.h가에서 "getEvents.h을"수입하고

이 질문에 명시된 바와 같이 나는있는 NSData 때문에 스위프트에 목표 - 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을 확장하려는 경우 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 함수 이름을 변경하고 모든 것이 작동하고 있다고 제안하면서 코드를 변경 한 후 고맙습니다. :) –

관련 문제