简体   繁体   English

Objc to swift bridge`使用未声明的标识符'cocoarr'

[英]Objc to swift bridge `use of undeclared identifier 'cocoarr'`

I'm combining Swift and Objective-C in the same project. 我在同一个项目中结合了Swift和Objective-C。 I am trying to use STTwitter cocoapod like this: 我试图像这样使用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代码

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

Everything looks fine in Obj-C (I tried not investigate variable passed to successBlock , they all have valid values). Obj-C中的一切看起来都很好(我试过不调查传递给successBlock变量,它们都有有效的值)。 But in Swift, when successBlock gets executed, tweets was: 但是在Swift中,当successBlock被执行时, tweets是:

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

}

How do I fix this and pass NSArray into Swift? 我如何解决这个问题并将NSArray传递给Swift? (No compile error) (没有编译错误)

That worked for me. 这对我有用。

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

Try to specify the type of the array instead AnyObject. 尝试指定数组的类型而不是AnyObject。

I hope it helps. 我希望它有所帮助。

Cheers. 干杯。

Try [[String:AnyObject]] rather than [AnyObject] 尝试[[String:AnyObject]]而不是[AnyObject]

I got the same error in a smilar functionality. 我在smilar功能中遇到了同样的错误。 When changing from: 更改时:

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
}

to

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
}

I got it working. 我搞定了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM