Xcode15下M1设备Moya/RxSwift报错:无法调用非函数类型'[Observable<Event>.Type]'
解决Moya/RxSwift中
Cannot call value of non-function type '[Observable<Event>.Type]'报错 环境信息
- 设备:MacBook M1
- 开发工具:Xcode 15
- 依赖版本:Moya/RxSwift 15.0.0(依赖Moya/Core、RxSwift ~>6.0)
报错信息
Cannot call value of non-function type '[Observable
报错代码
private func bindingsStrongify<Event, O, WeakOwner>(_ owner: WeakOwner, _ bindings: @escaping (WeakOwner, O) -> (Bindings<Event>)) -> (O) -> (Bindings<Event>) where WeakOwner: AnyObject { return { [weak owner] state -> Bindings<Event> in guard let strongOwner = owner else { return Bindings(subscriptions: [], events: [Observable<Event>]()) } return bindings(strongOwner, state) } }
问题原因
报错出现在return Bindings(subscriptions: [], events: [Observable<Event>]())这行代码中:在当前Xcode 15和RxSwift 6的环境下,编译器错误地将[Observable<Event>]推断为[Observable<Event>.Type](即Observable类型的数组),而非Observable<Event>实例的数组,导致尝试调用类型作为函数时触发报错。
解决方案
将报错行中的[Observable<Event>]()替换为空数组[],利用Swift的类型推断自动匹配events参数所需的[Observable<Event>]类型。修改后的代码如下:
private func bindingsStrongify<Event, O, WeakOwner>(_ owner: WeakOwner, _ bindings: @escaping (WeakOwner, O) -> (Bindings<Event>)) -> (O) -> (Bindings<Event>) where WeakOwner: AnyObject { return { [weak owner] state -> Bindings<Event> in guard let strongOwner = owner else { return Bindings(subscriptions: [], events: []) } return bindings(strongOwner, state) } }
若需要明确指定数组类型,也可以写成events: Array<Observable<Event>>(),不过推荐使用更简洁的[]。
内容的提问来源于stack exchange,提问作者Duncan
相关产品推荐
相关产品推荐

