나는 여기서 미쳤어.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의 내용을 얻기 위해 노력하고
이 왜 ObjC 클래스와 스위프트 함수가 같은 이름을 가질 수있다? 그리고 클래스 이름이 소문자로 시작하는 이유는 무엇입니까? – user28434
먼저 getEvents를 GetEvents로 이름을 바꿉니다. 대문자로 시작하는 것이 좋습니다. 유형과 동일한 이름을 가진 메소드를 갖는 것이 문제의 일부라고 생각합니다. –
NSString을 확장하려는 경우 NSString을 서브 클래스화할 수 없습니다. Cathegory를 사용하십시오. NSString은 클래스가 아니라는 것을 알 수 있습니다. 이것은 런타임에서 많은 구현을 할 수있는 추상화입니다. – markov