【发布时间】:2015-09-25 13:03:21
【问题描述】:
我有一个用 Swift 编码的委托类。我有一个具有这个 Swift 类的委托属性的 Objective-C 类。 Swift 委托类采用具有 NSArray* 类型所需属性的 Objective-C 协议。 Swift 代码构建了一个可变数组类 var,然后将其作为 [AnyObject] 返回。
可变数组的构建以及将其分配给 Swift 类 var 是可行的,但有时该函数会将 nil 返回给我的 Objective-C 类。
当我设置断点并逐行执行时,它可以工作,但如果我让它运行,它每次都返回 nil。
我还添加了日志语句,验证 Swift 类每次都构建可变数组,但 Objective-C 代码一直为零。我唯一要做的就是将我的 Objective-C 协议属性更改为 NSMutableArray ,但这似乎我绕过了这个问题。如何使用 NSArray 完成这项工作?
如果我让 Swift 代码返回 NSArray!我收到一个编译错误,说 Swift 类没有实现所需的委托方法。
如果我将 Swift 代码更改为返回
Array<AnyObject>
它可以编译,但仍然存在将 nil 返回到我的 Objective-C 类的相同问题。
Objective-C 协议如下所示:
@protocol MySocialDelegate <NSObject>
-(NSArray*)availableChannels;
@end
Swift 委托类如下所示:
class MySocialDelegateSwiftClass: NSObject, MySocialDelegate {
private var socialChannels = NSMutableArray()
func availableChannels() -> [AnyObject]! {
if ( self.socialChannels.count == 0 ) {
let channel = ...getChannel()
if ( channel != nil && channel?.guid != nil ) {
self.socialChannels.addObject(channel)
}
if( someCondition ) {
let channel = ...getChannel()
if ( channel != nil && channel?.guid != nil ) {
self.socialChannels.addObject(channel!)
}
}
}
// self.socialChannels will contain 2 objects
return self.socialChannels as [AnyObject]
}
}
调用该 Swift 委托的 Objective-C 类看起来像这样:
ViewController *vc = [[UIStoryboard storyboardWithName...
vc.socialDelegate = instanceOfMySocialDelegateSwiftClass;
if([vc.socialDelegate respondsToSelector:@selector(availableChannels)])
vc.availableChannels = [vc.socialDelegate availableChannels];
// vc.availableChannels will be nil
【问题讨论】:
标签: ios objective-c swift nsmutablearray nsarray