gpt4 book ai didi

ios - 采用Objective-C协议(protocol)并返回NSArray

转载 作者:行者123 更新时间:2023-11-30 14:15:10 25 4
gpt4 key购买 nike

我有一个用 Swift 编码的委托(delegate)类。我有一个 Objective-C 类,它具有该 Swift 类的委托(delegate)属性。 Swift 委托(delegate)类采用 Objective-C 协议(protocol),并具有 NSArray* 类型的必需属性。 Swift 代码构建一个可变数组类 var,然后将其返回为 [AnyObject]。

可变数组的构建以及将其分配给 Swift 类 var 的工作是有效的,但有时该函数将 nil 返回到我的 Objective-C 类。

当我设置断点并逐行单步执行时,它可以工作,但如果我只是让它运行,它每次都会返回 nil。

我还放入了日志语句来验证 Swift 类每次都会构建可变数组,但 Objective-C 代码始终为零。我唯一要做的就是将 Objective-C 协议(protocol)属性更改为 NSMutableArray,但这似乎是我绕过了这个问题。我怎样才能使用 NSArray 来完成这项工作?

如果我让 Swift 代码返回 NSArray!我收到一个编译错误,指出 Swift 类未实现所需的委托(delegate)方法。

如果我更改 Swift 代码以返回

Array<AnyObject>

它可以编译,但仍然存在向我的 Objective-C 类返回 nil 的相同问题。

Objective-C 协议(protocol)如下所示:

@protocol MySocialDelegate <NSObject>
-(NSArray*)availableChannels;
@end

Swift 委托(delegate)类如下所示:

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 委托(delegate)的 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

最佳答案

您是否尝试过在 availableChannels 的 Swift 实现中返回 NSArray?

private var socialChannels = NSMutableArray() 

func availableChannels() -> NSArray? {
...
return self.socialChannels // socialChannels is a NSMutableArray
}

关于ios - 采用Objective-C协议(protocol)并返回NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31278783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com