4

同じプロジェクトで Swift と Objective-C を組み合わせています。次のようにSTTwitter cocoapod を使用しようとしています。

// objective-c
// STTwitter category method
//
- (void)getStatusesLookupTweetIDs:(NSArray *)tweetIDs 
                     successBlock:(void (^)(NSArray *))successBlock 
                       errorBlock:(void (^)(NSError *))errorBlock {

    [self getStatusesLookupTweetIDs:tweetIDs
                    includeEntities:@(YES)
                           trimUser:@(YES)
                                map:@(YES)
                       successBlock:successBlock
                         errorBlock:errorBlock];
}

スウィフトコード

// swift
twitterApi.getStatusesLookupTweetIDs(ids, successBlock: { (tweets: [AnyObject]!) -> Void in
    process(tweets)
    finish()
}, errorBlock: { (err) -> Void in
    error(err)
})

Obj-C ではすべて問題ないように見えます ( に渡された変数を調べようとはしませんでしたがsuccessBlock、すべて有効な値を持っています)。しかし、Swift では、successBlock実行されると、tweets次のようになりました。

Printing description of tweets:
([AnyObject]!) tweets = 1 value {
  [0] = <error: use of undeclared identifier 'cocoarr'
error: 1 errors parsing expression
>

}

NSArrayこれを修正して Swiftに渡すにはどうすればよいですか? (コンパイルエラーなし)

4

2 に答える 2

0

[[String:AnyObject]]ではなく試してみてください[AnyObject]

同様の機能で同じエラーが発生しました。から変更する場合:

if let dictOrList = NSJSONSerialization.JSONObjectWithData(data, options:nil, error: &err) as? NSDictionary {
    callbackList = [dictOrList]
} else if let list = NSJSONSerialization.JSONObjectWithData(data, options:nil, error: &err) as? [AnyObject] {
    callbackList = list
}

if let dictOrList = NSJSONSerialization.JSONObjectWithData(data, options:nil, error: &err) as? [String: AnyObject] {
    callbackList = [dictOrList]
} else if let list = NSJSONSerialization.JSONObjectWithData(data, options:nil, error: &err) as? [[String:AnyObject]] {
    callbackList = list
}

私はそれを働かせました。

于 2015-04-02T09:20:39.073 に答える