gpt4 book ai didi

ios - 检查可选的多参数委托(delegate)方法

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:29 24 4
gpt4 key购买 nike

Swift 新手。如果 (a) 设置了委托(delegate)并且 (b) 实现了方法,则努力寻找最简洁/惯用的语法来调用可选的委托(delegate)方法。

我知道 ? 可以扮演这个角色(例如 self.delegate.foo?()),但我在尝试调用 ObjC 时无法获得正确的语法具有多个参数并返回一个我关心捕获的值 (Bool) 的委托(delegate)方法(我想区分“未实现的方法”和“已实现并返回 false 的方法”)。

这是一个例子。在这种情况下,MyDelegateProtocol 有一个可选方法 -myThing:argTwo:argThree:(返回 Bool)。

这段代码似乎语义正确,但它使用了 respondsToSelector 并且非常冗长。能否以更惯用的方式对其进行改进?

if let delegate = self.delegate {
if delegate.respondsToSelector(#selector(MyDelegateProtocol.myThing(_:argTwo:argThree:))) {
if delegate.myThing!(self, argTwo: foo, argThree: bar) {
// do something
}
}
}

最佳答案

这段代码应该可以很好地处理可选值。这就是您需要编写的全部内容。

delegate?.myThing?(self, argTwo: foo, argThree: bar)

此代码应处理您尝试检查的所有情况,例如:

if let result = delegate?.myThing?(self, argTwo: foo, argThree: bar) {
// "result" is the Bool returned from the method
}

如果它进入,则意味着您的方法存在并且委托(delegate)已设置。唯一可能出现的问题是您的方法是否返回可选的 Bool?(或任何可选的)类型。比起你不能确定你的逻辑是否正确,你需要使用你在问题中执行的某种检查。仍然在大多数情况下,不需要知道这样的方法是否存在,如果存在则调用它,如果不存在则不调用,我的代码会处理它。

关于ios - 检查可选的多参数委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39184756/

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