我有一个用Swift编写的委托类。我有一个Objective-C类,它具有此Swift类的委托属性。 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
答案 0 :(得分:0)
您是否尝试过在availableChannels
的<!1}}
private var socialChannels = NSMutableArray()
func availableChannels() -> NSArray? {
...
return self.socialChannels // socialChannels is a NSMutableArray
}
答案 1 :(得分:0)
我解决了我的问题。 Objective-C代码试图将从Swift代码返回的NSArray分配给弱属性。我从来没有注意到这个弱小的财产。我把它改成了强大而且有效。我认为这个问题是针对AnyObject的演员。