You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取ARSessionDelegate方法Selector时遇表达式歧义错误求助

解决ARSessionDelegate可选方法Selector歧义问题

你遇到的“Type of expression is ambiguous without more context”错误,根源是对协议中可选方法的Selector写法不符合Swift编译器的解析逻辑,尤其是你加的复杂类型转换反而让编译器无法明确识别。

正确的Selector写法

简化版(推荐,大部分场景适用)

直接通过协议名调用方法名即可,不需要额外的类型转换:

#selector(ARSessionDelegate.session(_:didUpdate:))

明确类型版(针对编译器仍有歧义的情况)

如果必须指定类型,要注意可选方法的函数类型是带可选标记的(Void?),因为可选方法本身可能未被实现:

#selector((ARSessionDelegate.session(_:didUpdate:)) as (ARSessionDelegate) -> (ARSession, ARFrame) -> Void?)

Rx扩展中的实际用法示例

给ARKit会话写Rx扩展时,用RxCocoa的delegate.methodInvoked方法会更省心,它已经处理了可选方法的调用逻辑,示例代码如下:

import RxSwift
import RxCocoa
import ARKit

extension Reactive where Base: ARSession {
    var didUpdateFrame: Observable<ARFrame> {
        return delegate.methodInvoked(#selector(ARSessionDelegate.session(_:didUpdate:)))
            .map { parameters in
                return parameters[1] as! ARFrame
            }
    }
}

内容的提问来源于stack exchange,提问作者Artem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:55:17