gpt4 book ai didi

arrays - 将值转换为未知 `Element` 类型的数组

转载 作者:行者123 更新时间:2023-11-30 10:08:12 25 4
gpt4 key购买 nike

假设一个函数可以对任何数组进行操作:

func g<T>(array: [T]) -> Void {
// ...
}

...以及接收 Any 类型值的函数:

func f(x: Any) -> Void {
if x is Array {
// g(?)
}
}

如何获得可传递给 gx 的正确键入版本?

请注意,g 并不(显式)依赖于类型 T。它所需要的只是能够迭代元素,这些元素可以被视为 Any 类型的值。因此,任何重写 g 以删除类型参数的解决方案也是可以接受的。

编辑:为了让事情变得更困难,我希望它能在 Linux 上工作,在 Linux 上,Swift 数组不是 NSArray ,直到你调用 .bridge() 对它们进行操作。

最佳答案

警告请注意,以下结果基于我在 Mirror 上进行的实验,并在 Swift 2.1.1 (Xcode 7.1.1) 中工作。 future 的 Swift 版本可能会改变Mirror 行为。

如果动态查找该值是否是任何类型的数组,您可以使用 Swift 的反射支持,通过 Mirror结构:

func processArray(array: Any) -> Bool {
let mirror = Mirror(reflecting: array)
guard mirror.displayStyle == .Collection else {
return false
}

print("array has \(mirror.children.count) elements")

return true
}

func f(x: Any) {
if processArray(x) {
// i just found an array
}
}

f([1, 2, 3, "4"]) // prints "array has 4 elements"

关于arrays - 将值转换为未知 `Element` 类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34885191/

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