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代码

// 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]

我在 smilar 功能中遇到了同样的错误。从以下位置更改时:

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 回答
0

这对我有用。

而不是使用:
[AnyObject]
尝试使用:
[Dictionary<String, AnyObject>] (or whatever class is inside the array)

尝试指定数组的类型而不是 AnyObject。

我希望它有所帮助。

干杯。

于 2014-12-05T17:51:23.943 回答