gpt4 book ai didi

swift - 在 Swift 中解包两种类型中的任何一种

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

我有一个方法可以在 Swift 中对两种类型的数据执行完全相同的操作。

为了简单起见(并且不重复方法),我将 AnyObject 作为参数传递给我的方法,它可以是这两种类型中的任何一种。如何使用 || (OR) 语句解包以便继续?或者,也许这是以其他方式完成的?

func myFunc(data:AnyObject) {

if let data = data as? TypeOne {
// This works fine. But I need it to look something like unwrapping below
}

if let data = data as? TypeOne || let data = data as? TypeTwo { // <-- I need something like this
// Do my stuff here, but this doesn't work
}

}

我确信这在 Swift 中是微不足道的,我只是不知道如何让它工作。

最佳答案

你不能统一同一事物的两个不同类型。您必须将它们分开,因为它们是两种不同类型的两种不同类型,编译器需要以两种不同的方式处理它们。

var x = "howdy" as AnyObject
// x = 1 as AnyObject

// so x could have an underlying String or Int
switch x {
case let x as String:
print(x)
case let x as Int:
print(x)
default: break
}

如果您有办法将 String 或 Int 传递给它,则可以从这两种不同的情况下调用相同的方法;但那是你能做的最好的。

func printAnything(what:Any) {
print(what)
}
switch x {
case let x as String:
printAnything(x)
case let x as Int:
printAnything(x)
default: break
}

当然可以问

if (x is String || x is Int) {

但问题是您距离执行实际的cast 还很远。 Actor 仍然必须单独进行。

关于swift - 在 Swift 中解包两种类型中的任何一种,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31684928/

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