gpt4 book ai didi

Swift:if let 语句中的条件类型转换(as?,as!)

转载 作者:可可西里 更新时间:2023-11-01 00:51:08 24 4
gpt4 key购买 nike

如果基类有多种可能性,则将“as”与“if”结合使用的推荐方法是什么,例如

var delegate:AnyObject?

func myFunction(){

if let delegate = self.delegate as? A1ViewController {
delegate.callFunction()
}

if let delegate = self.delegate as? A2ViewController{
delegate.callFunction()
}
}

有没有办法结合上面的两个 if 语句?

例如

if let delegate = self.delegate as? A1ViewController || let delegate = self.delegate = self.delegate as? A2ViewController {
delegate.callFunction()
}

最佳答案

无论您想要实现的目的是什么(在我看来,如果您需要的话,您的代码设计中存在一些问题),这是我为此类检查编写最简洁代码的 2 美分。

您目前不能对两个 let ... = ... 语句进行 OR。无论如何,您都可以解决创建包含公共(public)调用的公共(public)协议(protocol)、扩展类并使用单一代码路径的问题。

protocol CommonDelegateProtocol { 
func callFunction()
}

extension A1ViewController : CommonDelegateProtocol {}
extension A2ViewController : CommonDelegateProtocol {}

// then...

if let delegate = self.delegate as? CommonDelegateProtocol {
delegate.callFunction()
}

在不同代码路径的情况下带有开关的版本。

如果您需要不同的代码路径,这是我最好的选择。通过这种方式,您还可以强制您的代码评估所有可能的情况。

switch self.delegate {
case let d as A1ViewController:
// "d" is of type A1ViewController
d.callA1Function()
case let d as A2ViewController:
// "d" is of type A2ViewController
d.callA2Function()
default:
print("Uncovered case")
}

关于Swift:if let 语句中的条件类型转换(as?,as!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38527581/

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