【问题标题】:Objc to swift bridge `use of undeclared identifier 'cocoarr'`Objc 快速桥接`使用未声明的标识符'cocoarr'`
【发布时间】:2014-09-15 04:52:09
【问题描述】:

我在同一个项目中结合了 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? (没有编译错误)

【问题讨论】:

    标签: objective-c swift sttwitter


    【解决方案1】:

    这对我有用。

    而不是使用:
    [AnyObject]
    尝试使用:
    [Dictionary&lt;String, AnyObject&gt;] (or whatever class is inside the array)

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

    希望对你有帮助。

    干杯。

    【讨论】:

    • 抱歉项目已被长期删除。所以没有办法重新创建。其他人可以帮我确认吗?
    • 在尝试该代码时收到此警告cannot specialize non-generic type nsdictionary
    【解决方案2】:

    尝试[[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
    }
    

    我搞定了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多