我在同一个项目中将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 Code
// 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? (没有编译错误)
答案 0 :(得分:0)
这对我有用。
而不是使用:
[AnyObject]
尝试使用:
[Dictionary<String, AnyObject>] (or whatever class is inside the array)
尝试指定数组的类型而不是AnyObject。
我希望它有所帮助。
干杯。
答案 1 :(得分: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
}
我明白了。