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

は、ここに私の完全なコードです。 :私はスウィフトにNSDataのためのObjective-CのNSDataを使用して、この質問に指定されている私のURLの内容を取得しようとしています

拡張ブリッジング・HEADER.Hに

を「getEvents.h」をインポートしています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の関数名を変更してコードを変更していただきありがとうございました。 –

関連する問題