0

私は使用していますIBM Watson APIs - Alchemy Data news目的関数Cの値を返すswift関数の使い方は?

問題は、私は迅速な目的のCブリッジを使用していますが、その間に値を返す関数がついています。どのように私は目的のCコードでその値を使用するのですか?

は、ここに私の迅速なクラス

私は表示するalchemyDataNews.getNewsプリント値を持つようにしたい
@objc class alchemyNews : NSObject { 

func getNewsList() -> NewsResponse { 

    let apiKey = "api-key" 
    let alchemyDataNews = AlchemyDataNews(apiKey: apiKey) 

    let start = "now-1d" // yesterday 
    let end = "now" // today 
    let query = [ 
     "q.enriched.url.title": "O[IBM^Apple]", 
     "return": "enriched.url.title,enriched.url.entities.entity.text,enriched.url.entities.entity.type" 
    ] 
    let failure = { (error: NSError) in print(error) } 

    alchemyDataNews.getNews(start, end: end, query: query, failure: failure) { news in 
     print(news) 

    } 

    let response : NewsResponse = alchemyDataNews.getNews(start, end: end) { news in 
     return news 
    } 

    return response 
} 
} 

です。だから私はObjective Cクラスでこのようにこの関数を呼び出しています。

@property (strong, nonatomic) AlchemyDataNews *getnews; 

-(void)loadNews 
{ 
    self.getnews = [[AlchemyDataNews alloc]init]; 
    [self.getnews getNewsList]; 

} 

しかし今何をすればよいですか?これは関数を呼び出すだけで、応答を与えないので、配列に入れてtableviewに表示することができます。

+0

私はあなたのSwiftの実装について最も確信しています...同期的な方法でデータを使用したいと思われます。これは非同期のワークフローで収集します。だから私は_return_値の代わりに_completion closure_を使うために元の関数を完全に書き直す必要があると思います。 – holex

答えて

2

getNewsListNewsResponseのインスタンスを返しますので、変数に格納して使用する必要があります。

self.getnews = [[AlchemyDataNews alloc]init]; 
NewsResponse *newResponse = [self.getnews getNewsList]; 

// now you can use 'newResponse' 
// ... 

希望しました。

+0

迅速なクラスは大丈夫ですか?間違いはありますか? –

+0

はい、それは –

1

NewsResponseタイプ(およびその主プロパティ、NewsResult)はstructです。残念ながら、SwiftのstructタイプはObjective-Cに橋渡ししません。 Swift-to-Objective-Cブリッジングを使用するには、Swiftコードを書いてNewsResponseタイプをさらに処理する必要があります。

はたとえば、あなたが興味を持っている各NewsResponseからの情報を選択する可能性がありますし、(Objective-CのNSDictionaryにブリッジ)スウィフトDictionaryでこれらの値を格納します。また、テーブルビューをSwiftに公開し、スウィフトコードを作成してデータを取り込むこともできます。

希望に役立ちます!

+0

ありがとうありがとうございます:) –