gpt4 book ai didi

swift - 检查 View Controller 是否是 Swift 中少数可能的类型之一

转载 作者:搜寻专家 更新时间:2023-11-01 06:06:06 24 4
gpt4 key购买 nike

是否可以使用类型数组来重构以下条件?

vc is ViewController1 || vc is ViewController2 || vc is ViewController3...

最佳答案

是的,但你不应该。

您可以创建类型数组:

let types:[Any.Type] = [CGFloat.self, Double.self, Float.self]

您必须将数组类型指定为 [Any.Type]。它无法自行解决。

您甚至可以从匹配这些变量的变量中获取类型。

let double = 42.13
double.dynamicType --> Double.Type
types.contains(double.dynamicType) --> true

正如@werediver 所建议的,在 swift 中执行此操作的最快捷的惯用方法可能是定义一个空协议(protocol):

protocol ExaltedViewController { }

然后让你的各种类符合它:

extension ViewController1:ExaltedViewController { }
extension ViewController2:ExaltedViewController { }
extension ViewController3:ExaltedViewController { }

然后你就可以测试了

if vc is ExaltedViewController { ... }

这样做的好处是您不必拥有集中管理的列表。如果您的代码是一个框架,您希望将其他人的 View Controller 添加到该列表中,他们可以简单地采用该协议(protocol),而不必寻找特殊列表的位置并对其进行编辑。

另一种方法是使用带有堆栈 is 测试的 switch 语句。请考虑以下事项:

func typeWitch(something:Any) { // type divining function
switch something {
case is CGFloat, is Float, is Double:
print("it's got floating point superpowers")
case is Int, is Int16, is Int32, is Int8, is Int64:
print("it's a signed int")
default:
print("it's something else")
}
}

typeWitch("boo")
typeWitch(13)
typeWitch(42.42)

当然,您可以将这两种方法放在一起。

关于swift - 检查 View Controller 是否是 Swift 中少数可能的类型之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032753/

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